【问题标题】:What is the difference between mock() and stub() when using Mockito?使用 Mockito 时,mock() 和 stub() 有什么区别?
【发布时间】:2011-03-10 14:36:28
【问题描述】:

他们似乎都在做同样的事情 - 为什么你会优先使用一个而不是另一个?

org.mockito.Mockito.stub()
org.mockito.Mockito.mock()

【问题讨论】:

  • 存根方法已弃用,请查看文档。 Andy 展示了一种新的方法调用存根方法。
  • 嗯,好的-谢谢,这更有意义!
  • @Augusto 知道为什么 stub 被弃用了吗?我只是好奇主要区别是什么。我试图在项目的邮件列表中找到一些东西,但这并不容易。
  • @toniedzwiedz 我认为 Martin Fowler 的博文Mocks aren't Stubs 以某种方式解释了该决定的核心思想。这与 Mockito 并没有真正的关系,但我假设很多 TDD 的大佬都在讨论什么是存根或模拟。这显然是一个大假设,看看开发讨论列表/提交历史以获得更真实的原因会很有趣:)。
  • “它们在技术上是一样的”——来自 Mockito 的核心提交者之一:stackoverflow.com/a/14737131/377384

标签: java mockito


【解决方案1】:

您可以使用模拟对象来验证您是否以预期的方式调用它。在 Mockito 中,模拟对象自动成为存根,并且显式地进行验证。

来自 Mockito 的 "Why do we need another mocking framework?":

 Separation of stubbing and verification. Should let me code in line with intuition: 
 stub before execution, selectively verify interactions afterwards. I don’t 
 want any verification-related code before execution.

您可以在调用之前对调用的行为进行存根。例如(来自 Mockito 主页):

 when( mockedList.get(0)).thenReturn( "first" );

您可以在调用模拟对象后验证与它们的交互。例如:

 verify( mockedList ).add("one");

【讨论】:

  • 对不起 - 我的意思是方法,我已经更新了标题和问题。
  • 我接受了这个答案,因为它是有用的信息,但我的问题的真正答案是 Augusto 给出的 - stub() 已弃用。
猜你喜欢
  • 2011-11-12
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
相关资源
最近更新 更多