2 回答
TA贡献1830条经验 获得超9个赞
调用的时候when(spyClass.functionB(any(),any()).thenReturn(mockString)确实会走debug模式下的real方法。但是这个方法被嘲笑了,你functionA得到了mockString. 它确实有效。我真的不明白为什么看到你可以进入调试模式是一个问题。
要回答这个问题,使用mock不会通过该方法:
Class mockClass = mock(Class.class);
when(mockClass.functionB(any(),any())).thenReturn(mockString);
when(mockClass.functionA(arguments)).thenCallRealMethod();
mockClass.functionA(arguments);
但是:这是一个非常糟糕的测试,你永远不需要这样做(间谍或模拟)。如果您测试一个类,那么您将测试所有类。 如果您需要模拟一个方法来测试另一个方法,那么其中一个方法可能属于另一个类。
TA贡献1799条经验 获得超9个赞
或者在测试类的情况下。ClassA 有一个在 methodB() 内部调用的 methodA() 并且您对 methodB() 内部发生的所有事情都不感兴趣,那么您可以简单地对代表当前被测类的对象使用间谍,然后设置 methodB 的自定义行为() 用于例如。Mockito.doNothing().when() + @Spy。
@InjectMocks
@Spy
private ClassA testObj;
@BeforeEach
public void setUp() {
super.setUp();
// the actual call of the methodB() will be totally ignored
doNothing().when(testObj).methodB(input);
}
@Test
public void methodTest() {}
添加回答
举报