2010-06-27 45 views
21

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

您是否看到真正的原因或枪战条件,以便比Mockito更喜欢EasyMock?到目前为止,我所使用的代码库不能,但对您的观点感兴趣。

+0

可能的复制http://stackoverflow.com/questions/22697/whats-the-best-mock-framework-for- java – Raedwald 2013-10-22 19:38:03

回答

7

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

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

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

EasyMock具有非常类似的功能集。 Mockito的核心特色是基于EasyMock的那些领域,Mockito团队认为这些领域是限制或次优的做法。

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

我会说与任何适合您的测试要求的样式。

希望这会有所帮助!

6

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

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

+0

我可以想象这很痛苦。就我而言,我从1.8.3版本开始。看看发布说明,API似乎已经稳定下来。 – 2010-06-27 21:49:48

22

的Mockito的开发是为了让BDD风格的单元测试,那就是:

  • 考虑(你的单元测试运行的背景下)
  • 当(产生你感兴趣的行为事件在)
  • 然后(你要找的结果)。

,而不是

  • 鉴于
  • 期待(这里的地方验证一事无成)
  • 然后(回去看看你在期待中写道,因为有没有实际的信息在这里)。

恕我直言,它产生更多可读的测试,并允许你分开诸如你正在运行的上下文(设置Mocks)和验证你感兴趣的行为等事情。以前的嘲笑框架需要你为每次互动设定期望值,无论它与您在该测试中看到的行为方面是否相关。

+2

这不是真的,你不必为每次互动设定期望值。使用Easymock,你可以设置NiceMock(createNiceMock())。无论如何,我认为测试对象交互是一个好主意(应该是默认/常见行为)。我很少使用niceMocks – mickthompson 2010-06-28 11:51:57

+0

Mockito最初是EasyMock的一个分支,在NiceMock存在之前。 在BDD中,它们不是测试 - 只是关于如何使用类的一些示例的行为描述。 BDD的想法是让它变得简单和安全,而不是固定代码,所以不会中断。测试是一个很好的副产品。在那个世界里,测试每一个交互并不像产生可读的,易于改变的例子那么有意义。 – Lunivore 2010-06-28 12:06:22

+1

我想测试我的代码..然后,如果它的可读性和易于更改是另一回事..我不认为TDD专家会确认'交互没有多大意义'。你总是从组件的交互中产生东西...我宁愿有一些不太可读的东西,但测试正确的相互作用。恕我直言交流(作为可读/易于更改的代码)是测试中的主要主题,应该不容易避免 – mickthompson 2010-06-28 12:44:35