7

我试图在 Eclipse 中使用 JDave 在 junit 中模拟最终类(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:不能在 net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 的 net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:446) 子类化最终类类 AnyFinalClass

已经尝试过 jdave unfinalizer 的人可以告诉我如何使其在 eclipse 上工作的确切步骤。

我在 eclipse.ini 文件中设置了以下内容,但遇到了问题 -Xbootclasspath/a:lC:\WS\JunitTesting\jars\asm-3.0.jar -javaagent:C:\WS\JunitTesting\jars\jdave-unfinalizer-1.1.jar

在运行执行 junit 时,我将 vm 参数设为 javaagent:C:\WS\JunitTesting\jars\jdave-unfinalizer-1.1.jar

我不确定代码是什么。jdave 没有代码,它的站点指向其他一些不工作的站点。请更正我的代码或提供相同的工作代码。非常感谢任何帮助。

4

2 回答 2

2

来自 Enhancer.java 第 446 行:

if (TypeUtils.isFinal(sc.getModifiers()))
   throw new IllegalArgumentException("Cannot subclass final class " + sc);

我没有使用过 JDave,而是使用过另一个模拟框架,唯一允许模拟最终类的框架是powermock 也在这里

于 2012-08-09T09:58:54.340 回答
0

为了让 unfinalizer 运行,您必须-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
于 2013-01-18T01:12:00.197 回答