在单元测试期间调用 Mockito 间谍方法
Mockito spy method being called during unit test
我遇到了一个我无法理解的 Mockito.spy 行为。我正在监视一个对象实例的方法,该方法是 return 预期的结果。然而,被监视的方法实际上正在被调用。为什么会这样?不应该完全跳过该方法而只 return thenReturn 值吗?
这是我解释行为的示例代码:
public class MockitoSample {
public boolean methodA() {
return methodB("a","b");
}
public boolean methodB(String a, String b) { //method I want to mock
System.out.println("B called"); //why is this being called?
return false;
}
}
测试class,测试会通过
public class MockitoTest {
@Test
public void mockMethodB() {
MockitoSample sampleInstance= new MockitoSample();
MockitoSample sampleSpy = Mockito.spy(sampleInstance);
Mockito.when(sampleSpy.methodB(Mockito.any(String.class),Mockito.any(String.class))).thenReturn(true);
assertTrue(sampleSpy.methodA()); //passes as method B will return true now.
}
}
基本上这一行实际上会调用真正的方法和系统输出“B called”
Mockito.when(sampleSpy.methodB(Mockito.any(String.class),Mockito.any(String.class))).thenReturn(true);
为什么会这样?显然,这是一个示例并在此处传递,但是如果我有一个要模拟的 methodB 的完整实现怎么办?
Whosebug 将此推荐为相关内容,它解决了我的问题:
Mockito: Trying to spy on method is calling the original method
基本上,使用 doReturn 而不是 when。
Mockito.doReturn(true).when(sampleSpy).methodB(Mockito.any(String.class),Mockito.any(String.class));
同样有帮助的回复:Mockito - difference between doReturn() and when()
我遇到了一个我无法理解的 Mockito.spy 行为。我正在监视一个对象实例的方法,该方法是 return 预期的结果。然而,被监视的方法实际上正在被调用。为什么会这样?不应该完全跳过该方法而只 return thenReturn 值吗?
这是我解释行为的示例代码:
public class MockitoSample {
public boolean methodA() {
return methodB("a","b");
}
public boolean methodB(String a, String b) { //method I want to mock
System.out.println("B called"); //why is this being called?
return false;
}
}
测试class,测试会通过
public class MockitoTest {
@Test
public void mockMethodB() {
MockitoSample sampleInstance= new MockitoSample();
MockitoSample sampleSpy = Mockito.spy(sampleInstance);
Mockito.when(sampleSpy.methodB(Mockito.any(String.class),Mockito.any(String.class))).thenReturn(true);
assertTrue(sampleSpy.methodA()); //passes as method B will return true now.
}
}
基本上这一行实际上会调用真正的方法和系统输出“B called”
Mockito.when(sampleSpy.methodB(Mockito.any(String.class),Mockito.any(String.class))).thenReturn(true);
为什么会这样?显然,这是一个示例并在此处传递,但是如果我有一个要模拟的 methodB 的完整实现怎么办?
Whosebug 将此推荐为相关内容,它解决了我的问题: Mockito: Trying to spy on method is calling the original method
基本上,使用 doReturn 而不是 when。
Mockito.doReturn(true).when(sampleSpy).methodB(Mockito.any(String.class),Mockito.any(String.class));
同样有帮助的回复:Mockito - difference between doReturn() and when()