Mockito 比 EasyMock 更受欢迎? [关闭]
Posted
技术标签:
【中文标题】Mockito 比 EasyMock 更受欢迎? [关闭]【英文标题】:Mockito preferrable over EasyMock? [closed] 【发布时间】:2011-03-08 20:05:50 【问题描述】:最近我切换到了 Mockito 框架,对此我非常满意(另请参阅 blog-post)。从 EasyMock 到 Mockito 的转换非常简单,我设法使测试向下兼容(即测试用例的行为相同)。
您是否看到更喜欢 EasyMock 而不是 Mockito 的真正原因或枪决标准?到目前为止,我无法使用的代码库,但我对您的观点感兴趣。
【问题讨论】:
***.com/questions/22697/…的可能重复 【参考方案1】:开发 Mockito 是为了允许 BDD 样式的单元测试,即:
给定(您的单元测试运行的上下文) 何时(产生您感兴趣的行为的事件) 然后(您正在寻找的结果)。相对
给定 期待(这里是验证完成的地方) 什么时候 然后(返回并查看您在 Expect 中写的内容,因为这里没有实际信息)。恕我直言,它可以生成更具可读性的测试,并允许您将运行的上下文(设置 Mocks)和验证您感兴趣的行为等内容分开。以前的模拟框架需要您设置对每次交互的期望,无论它是否与您在该测试中查看的行为方面相关。
【讨论】:
这不是真的,您不必“为每次交互设置期望”。使用 Easymock,您只需设置一个 NiceMock (createNiceMock())。无论如何,我认为测试对象交互是一个好主意(并且应该是默认/常见行为).. 我很少使用 niceMocks Mockito 最初是 EasyMock 的一个分支,在 NiceMock 存在之前。在 BDD 中,它们不是测试——只是对行为的描述以及如何使用类的一些示例。 BDD 的想法是使更改变得容易和安全,而不是固定代码以使其不会中断。测试是一个很好的副产品。在那个世界里,测试每一个交互并不像生成可读、易于更改的示例那么有意义。 我想测试我的代码。如果它可读且易于更改,那就是另一回事了。我认为 TDD 专家不会确认“交互没有多大意义”。你总是从组件的交互中产生一些东西......我更喜欢有一些可读性较低但测试正确交互的东西.. 恕我直言交互(作为可读/易于更改的代码)是测试的主要主题,应该不是那么容易避免的 我认为 TDD 专家不一定是 BDD 专家。我也从未说过“交互没有多大意义”——请阅读我实际使用的措辞并考虑上下文。 我真的很喜欢xunitpatterns.com/Test%20Double.html的定义,它让测试方面非常清晰。我将 Mockito 用于测试存根、测试模拟和测试间谍。我采用中间/务实的方式编写测试,它们应该易于编写,但也应该测试“某些东西”(以避免“假阴性”测试结果)。当然 easymock (当不使用 nice-mocks 时)更严格,理论上更正确,但它创造了很多令人困惑的测试用例。在我看来,在测试用例中,验证步骤应该是最后一步,而不是与设置混合(如easymock中的'expect')。【参考方案2】:我对 EasyMock 比对 Mockito 更熟悉,所以我不得不做一些挖掘工作。 Mockito 有一个page,它从 Mockito 的角度进行了明确的比较。
在我看来,Mockito 的优点是:
显式分离存根和验证 匹配器基于 Hamcrest(JUnit 也支持)而不是自定义 API 创建的模拟总是“不错”;也就是说,未模拟的方法调用返回干净的数据(如空列表)而不是失败EasyMock 有一个非常相似的函数集。 Mockito 的核心差异化基于 Mockito 团队认为是限制或次优实践的 EasyMock 领域。
从功能的角度来看,这两种产品都不能模拟静态方法(我需要这样做以在没有 MBeanServer 的情况下进行测试),但在这种情况下,您可以在任一框架之上使用 PowerMock。
我会说选择适合您的测试要求的样式。
希望这会有所帮助!
【讨论】:
【参考方案3】:Mockito 现在可能比我上次尝试它时更好,但是当它更改它的 API 以与以前的版本不兼容时,它让我迷失了。升级到最新版本需要我更改许多现有的单元测试,我认为这是不可接受的。我认为它太不成熟且不稳定,无法满足我的需求。
但这并不意味着它有什么问题。我使用的版本仍然可以正常工作,虽然我已经切换回 EasyMock。
【讨论】:
我可以想象这很痛苦。就我而言,我从 1.8.3 版本开始。查看发布说明,API 似乎已经稳定。【参考方案4】:这是新闻报道。
Mockito 案例: http://code.google.com/p/mockito/wiki/MockitoVSEasyMock
EasyMock 案例: http://blog.octo.com/en/easymock-facts-fallacies/
【讨论】:
以上是关于Mockito 比 EasyMock 更受欢迎? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 NodeJs 开发中 Mongodb 比 MySql 更受欢迎? [关闭]
EasyMock vs Mockito:设计 vs 可维护性? [关闭]