用Java创建模拟对象的最佳框架是什么?为什么?每个框架的优点和缺点是什么?
当前回答
我们在工作中大量使用EasyMock和EasyMock类扩展,并且对它非常满意。它基本上能满足你所有的需求。看一下文档,有一个非常好的例子,它向您展示了EasyMock的所有特性。
其他回答
我开始使用EasyMock模拟。很容易理解,但重放步骤有点烦人。Mockito删除了这一点,也有一个更清晰的语法,因为可读性似乎是它的主要目标之一。我再怎么强调这一点也不为过,因为大多数开发人员会花时间阅读和维护现有代码,而不是创建它。
另一个好处是接口和实现类以相同的方式处理,不像在EasyMock中,您仍然需要记住(并检查)使用EasyMock类扩展。
我最近快速浏览了一下JMockit,虽然它的特性清单非常全面,但我认为这样做的代价是代码的易读性,并且必须编写更多的代码。
对我来说,Mockito达到了最佳的位置,易于编写和阅读,并处理大多数代码所需要的大多数情况。使用Mockito和PowerMock将是我的选择。
需要考虑的一件事是,如果您是独自开发,或者在一个小型紧密的团队中开发,那么对于拥有不同技能水平的开发人员的大公司来说,您所选择的工具可能不是最佳选择。对于后一种情况,需要更多地考虑可读性、易用性和简洁性。如果许多人最终不使用或不维护测试,那么获得最终的mock框架是没有意义的。
我喜欢JMock,因为您能够设置期望。这与检查在某些模拟库中是否调用了某个方法完全不同。使用JMock可以编写非常复杂的期望。看那个jmock骗子。
Mockito还提供了存根方法、匹配参数(如anyInt()和anyString())、验证调用次数(times(3)、atLeastOnce()、never())等选项。
我还发现Mockito简单干净。
我不喜欢Mockito的一点是你不能存根静态方法。
JMockit项目网站包含大量当前模拟工具包的比较信息。
特别是,请查看特性比较矩阵,其中包括EasyMock、jMock、Mockito、unitil Mock、PowerMock,当然还有JMockit。我尽量让它保持准确和最新。
我开始通过JMock使用mock,但最终过渡到使用EasyMock。EasyMock就是这样——更简单——并提供了一种感觉更自然的语法。从那以后我就没换过。
推荐文章
- 在Java中切换布尔变量的最干净的方法?
- 为什么在Java 8中String.chars()是整数流?
- 无法创建Android虚拟设备
- 在Java中数组是按值传递还是按引用传递?
- 如何在Spring中以编程方式获取当前活动/默认环境概要文件?
- equals vs Arrays。Java中的等号
- 为什么我们通常用|| / |?有什么不同?
- 如何在Android中获得一个RadioGroup的选定索引
- 如何大写一个字的第一个字母在字符串使用Java?
- 禁用IntelliJ星(包)导入?
- 面试问题:检查一个字符串是否是另一个字符串的旋转
- 将文件加载为InputStream的不同方法
- 如何使用Jest测试对象键和值是否相等?
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?