4

JMockit を使用するいくつかの JUnit テストのカバレッジを測定するために EMMA を使用しようとしています。しかし、EMMA で計測した後に JMockit テストを実行しようとすると、テストの約 4 分の 1 が次のエラーで失敗します。

com.logstorage.engine.sensor.SensorManagerTest.setUpBeforeClass(SensorManagerTest.java:98)
    java.lang.ClassFormatError
    at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
    at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:150)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:152)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:139)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:73)
    at mockit.Mockit.setUpMock(Mockit.java:235)
    at com.myapp.MyTest.setUpBeforeClass(MyTest.java:98)

どのテストが失敗し、どのテストが失敗しないかについてのパターンはわかりません。これは JMockit の単なるバグだと思いますが、回避策を知っている人はいますか?

「EMMA で ClassFormatError を取得していますか?」という非常によく似た質問を見つけました。しかし、解決策は私にとってはうまくいきません(私は reentrant=true モックメソッドを使用していません)。他のアイデアはありますか?

前もって感謝します。

4

4 に答える 4

2

私は同じ問題に遭遇しました - これは私のためにそれを修正したようで、うまくいけば他の人にも役立つでしょう.

を介してこれを実行している場合は、ターゲットの引数に含まれantていないことを確認してください。次のターゲットはエラーの原因となります。varsjavacdebuglevel

<javac srcdir="${src}" destdir="${bin}" debug="on" debuglevel="lines,source,vars" nowarn="true" /> 

次のように変更します。

<javac srcdir="${src}" destdir="${bin}" debug="on" debuglevel="lines,source" nowarn="true">

これはおそらく JMockit のバグです。

于 2009-05-29T02:13:19.707 に答える
0

jmockit を 1.5 から最近のバージョンに更新します。

于 2016-08-16T05:19:57.480 に答える
0

私は今日この質問を見ただけですが、可能であれば、EMMA で実行したときに ClassFormatError をスローするテストを送ってください。JMockit でバグを見つけようとします。

ところで、JMockit Coverage を試してみましたか? jmockit-coverage.jar をクラスパスに追加するだけで、何が得られるかを確認できます。通常、これにより (特別な構成なしで) 作業ディレクトリの下の「coverage-report」ディレクトリに適切な HTML カバレッジ レポートが作成されます。これ以上簡単なことはありません!

于 2009-06-30T22:27:26.023 に答える
0

私のチームにも同じ問題がありました。具体的なケースは、jMockit を使用して、EMMA をカバレッジ ツールとして TeamCity で実行されている単体テスト スイートのクラスから静的メソッドをモックすることでした。解決策は次のとおりです。

静的メソッドをモックした各テストにティアダウン メソッドを追加します。

@After
public void tearDown() throws Exception {
  Mockit.tearDownMocks(ClassWithStaticMethods.class);
}
于 2010-09-23T14:27:16.753 に答える