Mockito doReturn()。when()调用原始方法

时间:2018-09-14 17:09:03

标签: java unit-testing testing junit mockito

我无法让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.storeContent(),它是从classToTest.copyContent()内部调用的。我知道这堂课有点臭,但我无法对其进行重构。但是,这不是一个非常复杂的设置,我不确定为什么要调用实际的.storeContent()方法。

2 个答案:

答案 0 :(得分:2)

我建议不要使用ArgumentMatchers.any

,而不要使用null参数来设置模拟的storeContent方法。

例如

import static org.mockito.ArgumentMatchers.*;

// ...

Mockito.doReturn("This is not the method you are looking for").when(classToTest).storeContent(any(), any(), any());

答案 1 :(得分:0)

Mockito(和其他模拟工具)中存在一个限制,即无法NaN方法进行存根。

也许您的df[df.b.isnull()] # or notnull(), respectively 被标记为final吗?

如果是这种情况,只需删除ClassToTest#storeContent关键字,即可启动存根机制。