使用Mockito间谍的用例是什么?

在我看来,每个间谍用例都可以通过使用callRealMethod的模拟来处理.

我能看到的一个区别是,如果您希望大多数方法调用都是真实的,那么使用模拟和间谍可以节省一些代码行.是这样还是我错过了大局?

推荐答案

答案是the documentation:

真实部分模拟(从1.8.0开始)

最后,经过多次内部辩论;在邮件列表中,Mockito添加了部分模拟支持.之前我们认为部分模拟是代码气味.然而,我们发现了部分模拟的合法用例.

在1.8版之前,spy()不会生成真正的部分模拟,这会让一些用户感到困惑.阅读更多关于spying:here或用于spy(Object)方法的javadoc.

callRealMethod()是在spy()之后引入的,但spy()当然留在了那里,以确保向后兼容性.

否则,你是对的:间谍的所有方法都是真实的,除非存根.除非调用callRealMethod(),否则mock的所有方法都是存根的.总的来说,我更喜欢使用callRealMethod(),因为它不会迫使我使用doXxx().when()而不是传统的when().thenXxx()

Java相关问答推荐

我想知道为什么我的控制器给出嵌套响应

Spring Jpa findById会导致StackOverFlow错误,但其他查询没有问题

Mongo DB Bson和Java:在子文档中添加和返回仅存在于父文档中的字段?

在Java中测试DAO方法:假实现与内存数据库

条件加载@ManyToMany JPA

Java中如何根据Font.canDisplay方法对字符串进行分段

在bash中将数组作为Java程序的参数传递

声明带有泛型的函数以用作查找映射中的值

如何在Cosmos DB(Java SDK)中增加默认响应大小

是否在settings.xml中使用条件Maven镜像?

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

Cordova Android Gradle内部版本组件不兼容

如果第一位数字和最后一位数字相差超过一位,您将如何获得随机数?

在java中使用不同的application.properties-jar而不使用Spring

在缺少字段时使用Jackson With Options生成Optional.Empty()

在Java中将对象&转换为&q;HashMap(&Q)

Win32函数的JNA绑定DwmGetColorizationColor返回E_INVALIDARG错误

Java中的发布/订阅-Long Live和Short Live Publisher,哪种方法是正确的?

java.lang.ClassCastException:com.google.firebase.FirebaseException无法转换为com.google.fire base.auth.FirebaseAuthException

Java 21保护模式的穷尽性