Mockito比EasyMock更受欢迎?

时间:2010-06-27 13:41:20

标签: java unit-testing mocking easymock mockito

最近我转而使用Mockito框架并对此非常满意(另请参阅blog-post)。从EasyMock到Mockito的转换非常简单,我设法使测试兼容(即测试用例表现相同)。

你是否看到真正的理由或枪战标准更喜欢EasyMock而不是Mockito?到目前为止我使用的代码库不能,但我对你的观点感兴趣。

4 个答案:

答案 0 :(得分:22)

开发Mockito是为了进行BDD式单元测试,即:

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

而不是

  • 鉴于
  • 期待(这里是验证完成的地方)
  • 然后(回去看看你在Expect中写的内容,因为这里没有实际的信息)。

恕我直言,它会产生更多可读性测试,并允许您分离您正在运行的上下文(设置Mocks)和验证您感兴趣的行为等内容。以前的模拟框架需要您设置对每次互动的期望,无论它是否与您在该测试中看到的行为方面相关。

答案 1 :(得分:7)

我对EasyMock比Mockito更熟悉,所以我不得不做一点挖掘。 Mockito有一个page,从Mockito的角度做了明确的比较。

正如我所看到的,Mockito的优点是:

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

EasyMock具有非常相似的功能集。 Mockito的核心差异化基于EasyMock的那些领域,Mockito团队认为这些领域是局限性或次优实践。

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

我会说适合您的测试要求的风格。

希望这有帮助!

答案 2 :(得分:6)

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

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

答案 3 :(得分:1)