Java EasyMock中的模拟抽象类
我正在使用EasyMock 2.4,由于依赖关系,无法升级到最新版本。 我需要模拟抽象类,但不能使用createMock方法。 它抛出一个类不是接口的错误 有人能帮我解决这个问题吗 有一个名为ClassA的抽象类(我无法修改该类): 还有另一个模仿ClassA的MyTest类:Java EasyMock中的模拟抽象类,java,unit-testing,junit,easymock,Java,Unit Testing,Junit,Easymock,我正在使用EasyMock 2.4,由于依赖关系,无法升级到最新版本。 我需要模拟抽象类,但不能使用createMock方法。 它抛出一个类不是接口的错误 有人能帮我解决这个问题吗 有一个名为ClassA的抽象类(我无法修改该类): 还有另一个模仿ClassA的MyTest类: public class MyTest { private ClassA mockClassA; @Before public void setup() { mockClassA
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的情况下,无法使用easy mock模拟类(抽象类) 您有以下选项:
ClassA
子类,并重写其中的测试方法。但这显然是一个解决方案,可能无法为您提供足够的灵活性实际上,你对你的模拟有什么期待?(例如,为了存根一些方法调用,或者为了进行一些方法调用验证,其他…为类或接口创建模拟对象。我使用了导入静态org.easymock.classextension.easymock.*而不是导入静态org.easymock.easymock.*是。在EasyMock 3之前,您需要对模拟类进行类扩展。然而,最新的EasyMock版本并没有太多的依赖性(实际上只有objeness)
哪一个阻止了您?向我们展示您尝试了什么,并发布准确的错误消息以及哪一行触发了它,谢谢。更新了代码和错误消息的问题。请提供详细信息。我们无法编译您发布在此处的代码,因为它缺少一些信息。从错误中,我猜您有类似于
公共类ClassA
的内容。正如错误所述,ClassA
必须是一个接口,而不是一个类。请使用更多信息进一步更新代码。ClassA被定义为抽象类。
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)