22
4

4 回答 4

23

开发 Mockito 是为了允许 BDD 样式的单元测试,即:

  • 给定(您的单元测试运行的上下文)
  • 何时(产生您感兴趣的行为的事件)
  • 然后(您正在寻找的结果)。

  • 给定
  • 期望(这里是验证完成的地方)
  • 什么时候
  • 然后(返回并查看您在 Expect 中写的内容,因为这里没有实际信息)。

恕我直言,它产生更具可读性的测试,并允许您将运行的上下文(设置 Mocks)和验证您感兴趣的行为之类的东西分开。以前的模拟框架要求您为每个交互,无论它是否与您在该测试中查看的行为方面相关。

于 2010-06-28T11:33:26.190 回答
7

我对 EasyMock 比对 Mockito 更熟悉,所以我不得不做一些挖掘工作。Mockito 有一个从 Mockito 的角度进行明确比较的页面。

在我看来,Mockito 的优点是:

  • 存根和验证的显式分离
  • 匹配器基于 Hamcrest(JUnit 也支持)而不是自定义 API
  • 创建的模拟总是“好”的;也就是说,未模拟的方法调用返回干净的数据(如空列表)而不是失败

EasyMock 有一个非常相似的功能集。Mockito 的核心差异化基于 Mockito 团队认为是限制或次优实践的 EasyMock 领域。

从功能的角度来看,这两种产品都不能模拟静态方法(我需要在没有 MBeanServer 的情况下进行测试),但在这种情况下,您可以在任一框架之上使用 PowerMock。

我会说选择适合您的测试要求的任何风格。

希望这可以帮助!

于 2010-06-27T19:13:31.920 回答
6

Mockito 现在可能比我上次尝试它时更好,但是当它更改它的 API 以与以前的版本不兼容时,它让我迷失了。升级到最新版本需要我更改许多现有的单元测试,我认为这是不可接受的。我认为它对于我的需求来说太不成熟和不稳定了。

但这并不意味着它有什么问题。我使用的版本仍然可以正常工作,尽管我已经切换回 EasyMock。

于 2010-06-27T20:52:25.760 回答
1

这是一个新闻报道。

Mockito 案例: http ://code.google.com/p/mockito/wiki/MockitoVSEasyMock

EasyMock 案例:http: //blog.octo.com/en/easymock-facts-fallacies/

于 2013-10-22T18:11:37.543 回答