我试图在eclipse中使用JDave在junit中模拟final类(AnyFinalClass.java)。
public void setUp() throws Exception {
Mockery mockery = new Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
AnyFinalClass any = mockery.mock(AnyFinalClass.class);
}
我正在尝试使用jdave-unfinalizer-1.1.jar作为javaagent,但没有取得任何成功。我尝试了多种方法,但是遇到了异常
java.lang.IllegalArgumentException:无法继承最终类类AnyFinalClass at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:446) 在net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
已经尝试过jdave unfinalizer的人可以给我一个确切的步骤,让它在eclipse上运行。
我在eclipse.ini文件中设置了以下但是遇到了问题 -Xbootclasspath / A:LC:\ WS \ JunitTesting \罐\ ASM-3.0.jar -javaagent:C:\ WS \ JunitTesting \罐\ jdave-unfinalizer-1.1.jar
在运行执行junit时,我给了vm参数 javaagent:C:\ WS \ JunitTesting \罐\ jdave-unfinalizer-1.1.jar
我不确定代码是什么。 jdave没有代码,它的网站指向其他一些无效的网站。请更正我的代码或提供相同的工作代码。 任何帮助都非常感谢。
答案 0 :(得分:2)
来自Enhancer.java第446行:
if (TypeUtils.isFinal(sc.getModifiers()))
throw new IllegalArgumentException("Cannot subclass final class " + sc);
答案 1 :(得分:0)
为了让uninalizer运行,你必须将-javaagent:path_to_unfinalizer/jdave-unfinalizer-1.1.jar
放在测试运行配置的VM参数中。
我还必须在项目的类路径中包含jdave-unfinalizer的几个依赖项,从中启动测试。这些是从jdave的maven定义中获取的:
jdave-core 1.1
cglib-nodep 2.1_3
objenesis 1.0
asm 3.0
asm-commons 3.0
asm-tree 3.0