当前位置: 首页 > 面试题库 >

使用Mockito时,嘲笑和间谍有什么区别?

严稳
2023-03-14
问题内容

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

在我看来,每个间谍用例都可以使用callRealMethod进行模拟处理。

我可以看到的一个区别是,如果您希望大多数方法调用都是真实的,则可以节省一些代码行以使用模拟与间谍。是这样还是我错过了更大的前景?


问题答案:

答案在文档中:

真正的部分模拟(自1.8.0开始)

最后,在邮件列表上进行了许多内部辩论和讨论之后,Mockito添加了部分模拟支持。以前我们认为部分模拟是代码的味道。但是,我们发现了部分模拟的合法用例。

在1.8版之前,spy()并未生成真正的部分模拟,并且对某些用户造成了混乱。阅读更多有关间谍的信息:此处或在javadoc中获取spy(Object)方法

callRealMethod()是在之后引入的spy(),但为了确保向后兼容,当然保留了spy()。

否则,您是对的:间谍的所有方法都是真实的,除非被阻止。除非callRealMethod()调用,否则模拟的所有方法都是存根的。一般而言,我宁愿使用callRealMethod(),因为它不会强迫我使用doXxx().when()成语而不是传统when().thenXxx()



 类似资料:
  • 我正在为类编写一个单元测试,该类如下所示: 我想编写一个简单的单元测试,它将方法存根(这样它就不会实际触发并命中数据库),但它允许我验证调用是否最终执行。Mockito似乎是这份工作的合适工具。 这似乎是一个很好的游戏计划(至少对我来说)。但当我实际编写代码时,在测试方法的第2行(行)出现以下编译器错误: 类型Mockito中的(T)不适用于参数(void)时的方法 我看到Mockito无法模拟返

  • 包括StackTrace。我尝试用这个when(requestBodySpec.body(any())替换body mock。然后返回(requestHeadersSpec);也但是没有用。我认为问题在于模仿单声道。只是反对。不确定可能是什么问题。如果有不同的方法来模拟单声道。请分开反对并通过,请让我知道。

  • 我想在我的发票类中存根methot generateFerenceNumber():

  • 当我试图模仿javax.ws.rs.core 时,我得到一条错误消息: 无法创建JAX-RS运行时委托 为什么会发生这种情况? 但是,当我试图嘲笑HttpServlet响应时,这是没有问题的!

  • 我也是Mockito和PowerMockito的新手。我发现我无法使用纯Mockito测试静态方法,因此我需要使用PowerMockito(对吗?)。 我有一个非常简单的类,名为Validate,使用这个非常简单的方法 因此,我需要验证: 1) 当我在null message参数上调用该静态方法时,将调用IllegalArgumentException。2)当我在null object参数上调用该