我正在调查用于我的项目的模拟框架,并将其缩小到了JMockit和Mockito。
我注意到在Stackoverflow上,Mockito被评为“Java最佳模拟框架”。在比较JMockit的功能时,可以在JMockit的"模拟工具比较矩阵"上看到,它有多种不同的功能。
是否有任何关于Mockito可以做到而JMockit无法实现,以及反过来的具体信息(不是意见)?
我正在调查用于我的项目的模拟框架,并将其缩小到了JMockit和Mockito。
我注意到在Stackoverflow上,Mockito被评为“Java最佳模拟框架”。在比较JMockit的功能时,可以在JMockit的"模拟工具比较矩阵"上看到,它有多种不同的功能。
是否有任何关于Mockito可以做到而JMockit无法实现,以及反过来的具体信息(不是意见)?
2019年9月更新: Spring Boot默认支持的唯一模拟框架是Mockito。如果你使用Spring,答案非常明显。
以上内容摘自http://jmockit.org/about.html。此外,它在多个方面比较了自身(JMockit)、PowerMock和Mockito:
现在有其他Java模拟工具,也克服了传统工具的限制,其中包括PowerMock、jEasyTest和MockInject。最接近JMockit功能集的是PowerMock,因此我将在这里简要评估它(另外,其他两个工具更为有限,似乎不再积极开发)。(尽管信息来源可能存在偏见,但是......)
我建议使用JMockit。它是最易于使用、灵活的,几乎适用于所有情况,即使在难以控制被测试类的情况下(或由于兼容性原因等原因无法打破它)也能正常工作。
我使用JMockit的经验非常积极。
-javaagent
标志,并且显然找到合适的解决方法不在开发人员的范围内。另一个要点是,JMockit不再允许模拟私有方法和构造函数,而PowerMock则可以。 - Vampire我使用过Mockito和JMockit,我的经验是:
Mockito:
EasyMock:
JMockit:
此外,JMockit的其他优点包括:
我个人更喜欢JMockit,我认为它更具有功能丰富性和灵活性,但需要稍微陡峭的学习曲线。通常有多种方法可以实现相同的mocking效果,并需要在设计mocks时更加小心。
我之所以使用jMockit,只是因为它在 Deencapsultation.class 中有反射库。实际上,我喜欢Mockito的风格,但我拒绝改变我的代码或混淆我的API,只为了让一个有限的测试框架能够访问它。而且我是一个所有代码都要测试的粉丝,所以一个不能轻易测试私有方法的框架并不是我想要使用的。
我被这篇文章吸引了
尽管(承认)有一个(相当大的)学习曲线,jMockit现在是我主要的单元测试框架。
对于我们遗留代码库(有许多静态方法调用等)的简单测试,JMockit非常宝贵。[在我的博客上文章进行无耻的宣传]