2

この質問は、ジャンブル ミューテーション テスト フレームワーク ( http://jumble.sourceforge.net/ )に関するものです。

私は自分の仕事で取り組んでいるプロジェクトをごちゃまぜにしようとしています。私はこのプロジェクトの1つのクラスでジャンブルを実行しましたが、いくつかのクラスで突然変異を実行しますが、他のクラスではそれが伝えます

「テストクラスが壊れています」

これらのテストクラスをantタスクで実行しても、正常に実行されます。

私は何がうまくいかないのかを知りたいと思っており、ジャンブルがテストが壊れていると報告したクラスごとに、Eclipse でデバッグモードでジャンブルを実行し始めました。これらのクラスをデバッグするときは、junit クラスの TestResult のインスタンス フィールドに入ります。これにより、テスト クラスをジャンブル実行したときに junit が報告するエラーと失敗の説明を確認できます。テストクラスが壊れていると言われている理由を教えてください。何が起こっているのかを知るためにデバッグする必要があります。ジャンブルが失敗したテストの結果である、私が観察した問題とエラーの詳細は、次のいくつかです。

(私が働いている会社の法的制限により、特定のコードを投稿することはできませんが、できる限り説明できるように努めます)

クラス「フォワーダー」の場合、デバッグモードでジャンブルを実行し、スムーズに実行して、完全に変異させます。これは私を最も驚かせるケースです.antタスクジャンブルで実行すると「テストクラスが壊れている」と報告されますが、Eclipseのデバッグモードでは問題なく実行されます。

クラス Action およびその他の多くの場合、デバッグ モードでテスト クラスを実行するとエラーが発生し、エラーの説明を調べると、エラーは次のようになります。

java.lang.ClassNotFoundException: org.junit.rules.ExpectedException.

私はjunit jarにそのクラスを持っており、そのパスはEclipseデバッグモードとantタスクで利用できます。また、このクラスは依存関係を持つセレン フレームワークの jar 内にあります。クラス ローダーがロードするクラスのバージョンを決定できない可能性があると思います。確信はないけど。

クラス Module についても、同じことを行います。テストが jumble によって実行され、実行が終了したときに、TestResult JUnit クラスで表示されるエラー メッセージを調べます。このクラスでは、次のようになります。

java.lang.LinkageError: ロードの制約違反: ローダー "com/reeltwo/jumble/mutation/MutatingClassLoader@5b8d5b8d" は以前、ローダー "sun/misc/Launcher$ によって定義された "org/hamcrest/Description" という名前の別のタイプのロードを開始しましたAppClassLoader@7fce7fce"

このエラーは私を驚かせました。Jumbleには独自のクラスローダーがあり、それが何らかの形で私のトラブルの原因になっているのではないかと考えさせられます.

あらゆる種類の助けに本当に感謝します、マルコス

4

1 に答える 1

0

Jumbleは、カスタムクラスローダーを使用してミューテーションを挿入します。これが問題の原因となる可能性があります。

また、classnotfound例外の原因となる可能性のある独自のバージョンのjunitも埋め込まれています。より多くの情報がなければ、確かに言うのは難しいです。

Jumbleメーリングリストを介して開発者に質問するか、代わりにhttp://pitest.orgでPITを試してみてください。

PITは、クラスローダーを使用する代わりにインストルメンテーションAPIを使用してミューテーションを挿入し、JUnitを埋め込まず、通常ははるかに高速です。私はそれを書いたので、おそらく非常に偏っています。

于 2012-01-24T21:45:51.487 に答える