Mockito比EasyMock更受欢迎?

man*_*ana 21 java unit-testing easymock mocking mockito

最近我切换到了Mockito框架并且对它非常满意(另见blog-post).从EasyMock到Mockito的转换非常简单,我设法使测试兼容(即测试用例表现相同).

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

Lun*_*ore 22

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

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

而不是

  • 特定
  • 期待(这里是验证完成的地方)
  • 什么时候
  • 然后(回去看看你在Expect中写的内容,因为这里没有实际的信息).

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

  • 我非常喜欢http://xunitpatterns.com/Test%20Double.html的定义,这使得测试方面非常清晰.我使用Mockito进行Test-Stubs,Test-Mocks和Test-Spy.我采用中间/务实的方式编写测试,它们应该易于编写,但也应该测试"某些东西"(以避免"假阴性"测试结果).肯定easymock(当不使用漂亮的模拟时)更严格,理论上更正确,但它创造了许多令人困惑的测试用例.在我看来,在测试用例中,验证步骤应该是最后一步,而不是与设置混合(如easymock中的'expect'). (3认同)
  • 这不是真的,你不必"为每次互动设定期望".使用Easymock,您可以设置NiceMock(createNiceMock()).无论如何,我认为测试对象交互是一个好主意(并且应该是默认/常见行为)..我很少使用niceMocks (2认同)

mls*_*ter 7

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

在我看来,Mockito的优点是:

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

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

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

我想说哪种风格适合您的测试要求.

希望这可以帮助!


Bra*_*ugh 6

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

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