如何jmock Final class

时间:2012-08-09 09:22:20

标签: junit

我试图在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没有代码,它的网站指向其他一些无效的网站。请更正我的代码或提供相同的工作代码。 任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:2)

来自Enhancer.java第446行:

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

我没有使用过JDave,但是使用了另一个模拟框架,唯一允许模拟最终类的是powermock 另请看here

答案 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