Jmockit 与 EasyMock 有何不同?哪个更好用?

How is Jmockit different from EasyMock? Which is better to use?

我长期致力于 JUnits 中的 EasyMocking。我对此非常满意,但现在我想知道 EasyMocks 与 Jmockits 有何不同。我尝试浏览他们的文档,发现语法有点不同。但我无法弄清楚他们的表现是否有任何差异。 任何人都可以帮我弄清楚使他们中的任何一个比另一个更好的要点是什么? JMockit 中是否有其他元素没有的特殊元素? 提前致谢...

您可以在此处找到有关它们之间差异(以及 mockito!)的博客 post:http://www.baeldung.com/mockito-vs-easymock-vs-jmockit

虽然它们都有不同的语法和不同的工作方式,但您应该能够使用任一框架实现您需要的任何模拟。

JMockit 和EasyMock/jMock/Mockito/PowerMock 有很多不同。 这些是主要的:

  1. 支持集成测试:JMockit 支持 out-of-container integration testing approach, similar to what the Spring Test module 提供,还支持 Java EE。其他模拟库仅支持使用模拟对象进行独立单元测试。
  2. 一个"faking" API (see also in xUnit Patterns), in addition to the mockingAPI。其他每个模拟库都只有一个模拟 API.
  3. 除 "mock objects" 外,还完全支持 "mocking"。其他模拟库使用它们创建的模拟对象,这些对象需要以某种方式传递给被测代码。使用 EasyMock/jMock/Mockito、static 方法、构造函数和“new-ed”对象根本无法模拟。 PowerMock 也支持完全模拟,但仍然专注于模拟对象(具体来说,new-ed 对象必须 "replaced" 通过 whenNew 记录模拟对象,而使用 JMockit 测试可以简单地声明一个 @Mocked 字段).
  4. 支持 mocking/faking final class 类和方法。只有 PowerMock 也提供这种支持。 Mockito 最近添加了一个 "inline mock maker",它增加了对 finals 的支持,但默认情况下它不活动并且可能不那么可靠。
  5. 支持 mocking/faking 未指定的子 class 和接口实现(其中测试仅将基类型声明为 mocked/faked)。
  6. 在 mocking API 中,对具有多个参数的方法的期望可以 recorded/verified 带有参数匹配器(例如 anyString 等)仅适用于 一些 个参数,而其他模拟 API 需要这样的匹配器 每个 个参数。
  7. 同样在模拟 API 中,期望可以在测试代码被执行后显式 验证 ,就像在 Mockito 中一样。 EasyMock/jMock不支持此验证模型。

至于性能,与使用 EasyMock/jMock/Mockito(通过subclass定义完成),与PowerMock相比更低(通过class定义完成)在自定义 classloader 上)。但是,如果进行了大量模拟,您应该只会注意到性能差异,这很可能表明过度使用模拟。