首页 > Java > java教程 > Mockito:'doReturn()”与'when()”——我什么时候应该使用哪个进行模拟?

Mockito:'doReturn()”与'when()”——我什么时候应该使用哪个进行模拟?

Linda Hamilton
发布: 2024-12-09 16:01:16
原创
985 人浏览过

Mockito: `doReturn()` vs. `when()` – When Should I Use Which for Mocking?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板