7

日食で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) で最終クラス class 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

-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 に答える