用Java创建模拟对象的最佳框架是什么?为什么?每个框架的优点和缺点是什么?
当前回答
Mockito还提供了存根方法、匹配参数(如anyInt()和anyString())、验证调用次数(times(3)、atLeastOnce()、never())等选项。
我还发现Mockito简单干净。
我不喜欢Mockito的一点是你不能存根静态方法。
其他回答
我已经成功使用Mockito。
当我尝试学习JMock和EasyMock时,我发现学习曲线有点陡峭(尽管可能只有我这样)。
我喜欢Mockito,因为它的语法简单干净,我可以很快掌握。最小语法的设计是为了很好地支持常见的情况,尽管有几次我需要做一些更复杂的事情,但我发现我想要的东西是支持的,而且很容易掌握。
以下是Mockito主页的一个例子:
import static org.mockito.Mockito.*;
List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();
没有比这更简单的了。
我能想到的唯一主要缺点是它不会模拟静态方法。
我们在工作中大量使用EasyMock和EasyMock类扩展,并且对它非常满意。它基本上能满足你所有的需求。看一下文档,有一个非常好的例子,它向您展示了EasyMock的所有特性。
我是PowerMock的创建者,所以显然我必须推荐它!: -)
PowerMock扩展了EasyMock和Mockito,具有模拟静态方法、final方法甚至私有方法的能力。EasyMock支持已经完成,但是Mockito插件还需要一些工作。我们还计划添加JMock支持。
PowerMock并不打算取代其他框架,而是可以在其他框架不允许模拟的复杂情况下使用它。PowerMock还包含其他有用的特性,例如抑制静态初始化器和构造函数。
我开始通过JMock使用mock,但最终过渡到使用EasyMock。EasyMock就是这样——更简单——并提供了一种感觉更自然的语法。从那以后我就没换过。
我喜欢JMock,因为您能够设置期望。这与检查在某些模拟库中是否调用了某个方法完全不同。使用JMock可以编写非常复杂的期望。看那个jmock骗子。
推荐文章
- javax.transaction.Transactional vs . org.springframework.transaction.annotation.Transactional
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 如何单元测试Arduino代码?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 单元测试无效方法?
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?