Mockito:了解 doReturn() 和 when() 之间的区别
Mockito 的 doReturn() 之间遇到混淆是可以理解的... when() 和when()...thenReturn() 方法,因为它们可能看起来在做同样的事情。虽然两者都可以模拟方法调用并返回预定义值,但在使用间谍对象(用@Spy注释)而不是模拟(用@Mock注释)时,有一个微妙的区别变得相关。
关键区别:方法调用行为
关键区别在于这些方法在与间谍交互时的行为方式对象:
说明差异的示例:
考虑以下代码:
public class MyClass { public String methodToBeTested() { return anotherMethodInClass(); } public String anotherMethodInClass() { throw new NullPointerException(); } }
使用sied进行测试object:
@Spy private MyClass myClass; // ... // This approach will work without throwing an exception doReturn("test").when(myClass).anotherMethodInClass(); // This approach will throw a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
对于监视对象,when()...thenReturn() 尝试调用 anotherMethodInClass() ,这将抛出 NullPointerException。相比之下,doReturn()...when()避免了调用该方法,直接返回“test”,抑制了异常。
结论
它们之间的区别当使用监视对象时,两种方法变得显而易见。对于监视对象, doReturn()...when() 通过绕过实际方法调用并直接返回预定义值来提供更好的控制。相反,when()...thenReturn() 调用真正的方法,这可能会导致异常或其他意外行为。因此,选择适当的方法取决于所需的行为以及您使用的是模拟对象还是间谍对象。
以上是Mockito:'doReturn()”与'when()”:我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!