在Java中创建模拟对象的最佳框架是什么?为什么?每个框架的优缺点是什么?
发布于 2018-10-18 08:53:55
可以使用Groovy查看测试。在Groovy中,您可以使用'as'运算符轻松模拟Java接口:
def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest
除了这个基本功能外,Groovy还提供了更多关于模拟前端的功能,包括强大的功能MockFor
和StubFor
类。
发布于 2018-10-18 10:07:36
在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...
}
它有一个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";
}
}
}
}
缺点是它需要Java 5/6。
https://stackoverflow.com/questions/-100000865
复制相似问题