Mockito - 探索用于模拟的 doReturn() 和 when() 之间的区别
在 Spring MVC 应用程序中利用 Mockito 的功能时,开发人员经常会遇到 doReturn(...).when(...) 和 doReturn(...).when(...) 之间的相似之处当(...).then返回(...)。这就引发了一个问题:既然这两种方法表面上是等价的,为什么它们会存在。
虽然这两种方法在使用 @Mock 注释的模拟时产生相同的结果,但在使用 @Spy 注释的间谍对象时会出现微妙的差异。与 when(...).thenReturn(...) 在返回指定值之前执行实际的方法调用不同,doReturn(...) 完全绕过方法调用。
这种区别在以下情况下变得至关重要:处理具有抛出异常方法的监视对象。例如,考虑以下带有两个方法的类:
public class MyClass { protected String methodToBeTested() { return anotherMethodInClass(); } protected String anotherMethodInClass() { throw new NullPointerException(); } }
在测试类中:
@Spy private MyClass myClass; // ... // Executes methodToBeTested() and swallows the NullPointerException doReturn("test").when(myClass).anotherMethodInClass(); // Throws NullPointerException without executing methodToBeTested() when(myClass.anotherMethodInClass()).thenReturn("test");
如演示的, doReturn(...) 允许您控制返回值不触发方法执行,而when(...)首先执行该方法,然后才提供指定的结果。这种微妙的差异可以更好地控制对象模拟和异常管理,使 doReturn(...) 成为处理可能引发异常的间谍对象时的首选。
以上是Mockito:'doReturn()”与'when()”——我什么时候应该使用哪个进行模拟?的详细内容。更多信息请关注PHP中文网其他相关文章!