Bri*_*ise 315
我使用Mockito取得了很大的成功.
当我尝试学习JMock和EasyMock时,我发现学习曲线有点陡峭(尽管这可能只是我).
我喜欢Mockito,因为它简单而干净的语法让我能够很快掌握.最小的语法旨在很好地支持常见的情况,虽然我需要做一些更复杂的事情我发现我想要的东西是支持和易于掌握的.
这是Mockito主页上的一个(删节)示例:
import static org.mockito.Mockito.*;
List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();
Run Code Online (Sandbox Code Playgroud)
它没有那么简单.
我能想到的唯一主要缺点是它不会模拟静态方法.
Rog*_*rio 46
该JMockit项目网站包含了大量的信息,比较当前的嘲弄工具包.
特别是,查看功能比较矩阵,其中包括EasyMock,jMock,Mockito,Unitils Mock,PowerMock,当然还有JMockit.我尽可能地保持其准确和最新.
Kri*_*den 21
我在JMockit上取得了成功.
这是非常新的,因此它有点原始且记录不足.它使用ASM动态重新定义类字节码,因此它可以模拟所有方法,包括静态,私有,构造函数和静态初始化器.例如:
import mockit.Mockit;
...
Mockit.redefineMethods(MyClassWithStaticInit.class,
MyReplacementClass.class);
...
class MyReplacementClass {
public void $init() {...} // replace default constructor
public static void $clinit{...} // replace static initializer
public static void myStatic{...} // replace static method
// etc...
}
Run Code Online (Sandbox Code Playgroud)
它有一个Expectations接口,允许记录/播放场景:
import mockit.Expectations;
import org.testng.annotations.Test;
public class ExpecationsTest {
private MyClass obj;
@Test
public void testFoo() {
new Expectations(true) {
MyClass c;
{
obj = c;
invokeReturning(c.getFoo("foo", false), "bas");
}
};
assert "bas".equals(obj.getFoo("foo", false));
Expectations.assertSatisfied();
}
public static class MyClass {
public String getFoo(String str, boolean bool) {
if (bool) {
return "foo";
} else {
return "bar";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
缺点是它需要Java 5/6.
p3t*_*t0r 15
您还可以使用Groovy查看测试.在Groovy中,您可以使用'as'运算符轻松模拟Java接口:
def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest
Run Code Online (Sandbox Code Playgroud)
除了这个基本功能外,Groovy还提供了更多关于模拟前端的功能,包括强大的功能MockFor和StubFor类.
http://docs.codehaus.org/display/GROOVY/Groovy+Mocks
tra*_*ian 13
我开始使用EasyMock的模拟.很容易理解,但重播步骤有点烦人.Mockito删除了这个,也有一个更清晰的语法,因为看起来可读性是它的主要目标之一.我不能强调这是多么重要,因为大多数开发人员会花时间阅读和维护现有代码,而不是创建代码.
另一个好处是接口和实现类以相同的方式处理,不像EasyMock,你仍然需要记住(和检查)使用EasyMock类扩展.
我最近快速浏览了JMockit,虽然功能的清单非常全面,但我认为这样做的代价是结果代码的易读性,并且必须写更多内容.
对我来说,Mockito击中了最佳位置,易于编写和阅读,并处理大多数代码所需的大多数情况.使用Mockito和PowerMock将是我的选择.
需要考虑的一件事是,如果您自己开发,或者在一个小型的紧密团队中进行开发,您可能选择的工具对于拥有不同技能水平的开发人员的大公司来说可能不是最好的选择.在后一种情况下,需要更多考虑可读性,易用性和简单性.如果很多人最终没有使用它或不维护测试,那么获得最终的模拟框架是没有意义的.
小智 8
我很早就使用了JMock.我在上一个项目中尝试了Mockito并且喜欢它.更简洁,更清洁.PowerMock涵盖了Mockito中不存在的所有需求,例如模拟静态代码,模拟实例创建,模拟最终类和方法.所以我需要完成我的工作.
| 归档时间: |
|
| 查看次数: |
202299 次 |
| 最近记录: |