Mockito:'doReturn()”与'when()”:我什么时候应该使用哪个?
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中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

公司安全软件导致部分应用无法正常运行的排查与解决方法许多公司为了保障内部网络安全,会部署安全软件。...

将姓名转换为数字以实现排序的解决方案在许多应用场景中,用户可能需要在群组中进行排序,尤其是在一个用...

系统对接中的字段映射处理在进行系统对接时,常常会遇到一个棘手的问题:如何将A系统的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本启动Spring...

在使用MyBatis-Plus或其他ORM框架进行数据库操作时,经常需要根据实体类的属性名构造查询条件。如果每次都手动...

Java对象与数组的转换:深入探讨强制类型转换的风险与正确方法很多Java初学者会遇到将一个对象转换成数组的�...

电商平台SKU和SPU表设计详解本文将探讨电商平台中SKU和SPU的数据库设计问题,特别是如何处理用户自定义销售属...

Redis缓存方案如何实现产品排行榜列表的需求?在开发过程中,我们常常需要处理排行榜的需求,例如展示一个�...
