【发布时间】:2018-09-14 17:09:03
【问题描述】:
我无法让 Mockito 覆盖我正在测试的类中的方法。
@Test
public void test_classToTest() throws Exception {
DependencyA dependencyA = mock(DependencyA.class);
DependencyB dependencyB = mock(DependencyB.class);
DependencyC dependencyC = mock(DependencyC.class);
ClassToTest classToTest = ClassToTest.builder().dependencyA(dependencyA)
.dependencyB(dependencyB).dependencyC(dependencyC).build();
classToTest= Mockito.spy(classToTest);
Mockito.doReturn("This is not the method you are looking for").when(classToTest).storeContent(null, null, null);
String result = classToTest.copyContent(someVariable, SOME_CONSTANT);
我试图覆盖的方法是从 classToTest.copyContent() 内部调用的 classToTest.storeContent()。我知道这个类有点臭,但我无法重构它。但是,这不是一个非常复杂的设置,我不确定为什么会调用实际的 .storeContent() 方法。
【问题讨论】:
-
您正在测试的方法的方法签名是什么?
-
传递给真实方法的参数值是什么?也许用
any()s 替换nulls? -
以上克里斯托弗的观点,请首先检查
storeContent是public、非static和非final,并且ClassToTest同样是public和非@ 987654329@。 (一般来说,我还建议不要在您正在测试的类上使用spy,而是将类作为一个单元进行测试,而不是孤立地梳理方法;我理解这种吸引力,但对于大多数类来说,它假设一些私有对测试不重要的类实现的详细信息。)
标签: java unit-testing testing junit mockito