[英]Mock Abstract Class in EasyMock
我正在使用EasyMock 2.4,由于依赖关系,无法升级到最新版本。 我需要模拟抽象类,但不能使用createMock方法来实现。 抛出一个错误,该类不是接口。
谁能帮助我解决这个问题?
有一个称为ClassA的抽象类(我无法修改此类):
public abstract class ClassA {
}
还有一个模拟类A的MyTest类:
public class MyTest {
private ClassA mockClassA;
@Before
public void setup() {
mockClassA = createMock(ClassA.class); //Line number: 28
}
}
运行此命令时,它在createMock调用时引发以下异常:
java.lang.IllegalArgumentException: ClassA is not an interface
at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:590)
at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:557)
at java.lang.reflect.WeakCache$Factory.get(WeakCache.java:230)
at java.lang.reflect.WeakCache.get(WeakCache.java:127)
at java.lang.reflect.Proxy.getProxyClass0(Proxy.java:419)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:719)
at org.easymock.internal.JavaProxyFactory.createProxy(JavaProxyFactory.java:13)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:40)
at org.easymock.EasyMock.createMock(EasyMock.java:60)
at mypackage.MyTest.setup(MyTest.java:28)
v3.0之前的EasyMock使用Java代理机制创建模拟。 该机制仅能为接口创建代理,因此,至少在不升级到v3.0的情况下,无法通过简单的模拟来模拟类(抽象类)。
您有以下选择:
ClassA
子类,并覆盖那里的方法进行测试。 但这显然是一种解决方法,可能无法为您提供足够的灵活性。 实际上,您对模拟游戏有什么期望? (例如,存根某些方法调用,或进行某些方法调用验证,其他...)
EasyMock Class扩展用于为类或接口创建模拟对象。 我使用import static org.easymock.classextension.EasyMock。* ; 而不是导入静态org.easymock.EasyMock。* ;
是。 在EasyMock 3之前,您需要类扩展才能模拟类。 但是,最新的EasyMock版本没有太多依赖性(实际上只有Objenesis)。
哪一个阻止了您?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.