16

这个比较表明,JMockit 与其他框架相比有几个优势。

与 JMockit 相比,其他其中之一(JMock、EasyMock、Mockito、Unitils、PowerMock + Mockito/EasyMock)是否还有任何优势?

4

2 回答 2

17

我最近采用了一个使用 JMockit 的项目,我认为由于库能够模拟静态和私有方法,代码的质量肯定受到了影响。

测试非常脆弱,因为正在测试私有方法中包含的实现细节(因此,如果我更改类的执行方式,它可能会破坏测试,即使类所做的事情没有受到影响)。

代码中还充斥着对静态方法的调用——如果开发人员没有能力模拟这些方法,那么我认为他们会付出更多努力来更好地解耦。

于 2011-09-21T12:47:07.837 回答
14

三个缺点:

  • 您必须使用 Java 代理来执行字节码检测。
  • 您不能使用 Eclipse 附带的签名 junit.jar 文件。
  • 你必须学习一个模拟 API。(与存根对象相反)

您总是可以讨论能够像 JMockit 那样模拟最终类是否是一件好事。除非它是遗留代码,否则重构通常是更好的选择。

使用 Eclipse 之类的 IDE,我发现自己使用工具支持在测试类中生成存根比最近的模拟(JMockit、Mockito 等)更频繁。这种方法的优点是非常简单。当您的团队中有许多开发人员并且其中一些人不喜欢测试并且没有学习模拟框架的动力时,这尤其好。此外,存根实现没有框架限制!

如果您愿意将存根作为替代方案,您应该查看 Robert C. Martin 的关于此处此处的模拟和存根的博客

否则,它看起来非常好!虽然我只有 JMock、EasyMock 的经验和 JMockit 的基本知识。

于 2010-06-05T19:07:03.847 回答