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

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

Barbara Streisand
发布: 2024-11-28 03:44:10
原创
929 人浏览过

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

Mockito:了解 doReturn() 和 when() 之间的区别

Mockito 的 doReturn() 之间遇到混淆是可以理解的... when() 和when()...thenReturn() 方法,因为它们可能看起来在做同样的事情。虽然两者都可以模拟方法调用并返回预定义值,但在使用间谍对象(用@Spy注释)而不是模拟(用@Mock注释)时,有一个微妙的区别变得相关。

关键区别:方法调用行为

关键区别在于这些方法在与间谍交互时的行为方式对象:

  • when()...thenReturn() 在返回指定值之前进行真正的方法调用。这意味着真正的方法抛出的任何异常仍然需要处理。
  • doReturn()...when() 根本不调用该方法。相反,它直接返回预定义值。这会绕过任何实际的方法调用。

说明差异的示例:

考虑以下代码:

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

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