2009-05-25 32 views
3

EMMを使用して、JMockitを使用するいくつかのJUnitテストのカバレッジを測定しようとしています。しかし、私はテストの約四分の一、EMMAと計装後JMockitテストを実行しようとすると、次のエラーで失敗:どのテストが失敗し、そうでないよう、私は任意のパターンを見ることができないJMockit with EMMAを使用したClassFormatError

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を取得していますか?」という非常によく似た質問が見つかりました。解決策は私のためには機能しません(私はリエントラント=真実のモックメソッドを使用していません)。他のアイデア?

ありがとうございます。

+0

月の位置合わせでなければなりません。何も変わっていないので、私は2日前にこのエラーを受けていませんでした! –

答えて

2

私は同じ問題に遭遇しています。これは私のために修正されているようですが、うまくいけば誰も助けてくれるでしょう。

antで実行している場合は、javacターゲットのdebuglevel引数にvarsが含まれていないことを確認してください。次のターゲットでエラーが発生します。

<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のバグである - 非常に微妙とannyoing見つけるために。

+0

それは働いた!あなたは命を救う人です!これは私が "修正不可能な"ものとしてあきらめていたものでした:) –

0

EMMAで動作しているときにClassFormatErrorを投げるいくつかのテストを私に送ってください。できればJMockitのバグを見つけようとします。

ところで、JMockit Coverageを使用しようとしましたか? jmockit-coverage.jarをクラスパスに追加して、あなたが得るものを見てください。通常、これは、(余分な構成をせずに)作業ディレクトリの下にある "カバレッジレポート"ディレクトリに素晴らしいHTMLカバレッジレポートを生成します。それ以上は簡単にはできません!

+0

申し出ありがとうございますが、この問題は仕事中のプロジェクトであり、私の会社はあなたにソースのビットを送ってくれて嬉しくないと思います。私が問題を示すサンプルテストを行うことができれば、私はあなたに知らせるでしょう。 私はJMockitカバレッジを試していません。確かめます! EMMAを使用する主な理由は、EclipseとHudsonの両方に優れたプラグインがあることです。 –

+0

こんにちはロジェリオ、私はあなたにこれを再現する代表的なクラスを得ることができるかどうか見てみましょう。 –

0

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

静的メソッドを嘲笑各テストに涙ダウン方式を追加します:

@After 
public void tearDown() throws Exception { 
    Mockit.tearDownMocks(ClassWithStaticMethods.class); 
} 
0

1.5から任意の最新バージョンへのアップデートjmockitをソリューションは、以下の通りでした。