用Java创建模拟对象的最佳框架是什么?为什么?每个框架的优点和缺点是什么?


当前回答

我很早就使用了JMock。我在我的最后一个项目中尝试了Mockito,并喜欢它。更简洁,更干净。PowerMock涵盖了Mockito中没有的所有需求,比如模拟静态代码、模拟实例创建、模拟最终类和方法。这样我就有了完成工作所需的一切。

其他回答

我已经成功使用Mockito。

当我尝试学习JMock和EasyMock时,我发现学习曲线有点陡峭(尽管可能只有我这样)。

我喜欢Mockito,因为它的语法简单干净,我可以很快掌握。最小语法的设计是为了很好地支持常见的情况,尽管有几次我需要做一些更复杂的事情,但我发现我想要的东西是支持的,而且很容易掌握。

以下是Mockito主页的一个例子:

import static org.mockito.Mockito.*;

List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();

没有比这更简单的了。

我能想到的唯一主要缺点是它不会模拟静态方法。

JMockit项目网站包含大量当前模拟工具包的比较信息。

特别是,请查看特性比较矩阵,其中包括EasyMock、jMock、Mockito、unitil Mock、PowerMock,当然还有JMockit。我尽量让它保持准确和最新。

您还可以看看如何使用Groovy进行测试。在Groovy中,你可以使用'as'操作符轻松模拟Java接口:

def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest 

除了这些基本功能之外,Groovy在模拟方面还提供了更多的功能,包括强大的MockFor和StubFor类。

http://docs.codehaus.org/display/GROOVY/Groovy+Mocks

我喜欢JMock,因为您能够设置期望。这与检查在某些模拟库中是否调用了某个方法完全不同。使用JMock可以编写非常复杂的期望。看那个jmock骗子。

是的,Mockito是一个很棒的框架。我使用它与hamcrest和谷歌guice一起设置我的测试。