ハロー、
次のような状況があります。
Eclipse RCP アプリケーションを開発しており、Eclipse 3.4 からEclipse 3.5に切り替えたいと考えています。JUnit-Tests は JUnit 4.3.1 を使用しており、テスト スイートを開始するための起動構成があります。ここで詳しく説明する必要はないと思います。
問題は:
Eclipse 3.5 でテストを実行しても機能しません。JUnit はテスト クラス ((at)Test でも (at)RunWith でもない) で注釈を見つけることができません。
何が起こっているのかを確認するために、いくつかのログ出力でjunitライブラリにパッチを当てました。この問題はクラスローディングの問題であることがわかりました。
JUnit に渡されたテスト クラスは、JUnit が「RunWith」などの注釈クラスをロードするために使用するものとは異なる ClassLoader に「あります」。これはEclipse 3.4には当てはまりません
in org.junit.internal.requests.ClassRequest:
public Runner getRunner() {
log("TestClass ClassLoader: "+this.fTestClass.getClassLoader());
log("RunWith.class ClassLoader: "+RunWith.class.getClassLoader());
... // validating test class: searching for annotations and more
}
最初の行は、2 行目とは別のクラスローダーを出力します。JUnit はテスト クラスの注釈を Annotation-Class (ここでは RunWith.class) と一致させることができないため、これは問題です。CL1 の "RunWith" は CL2 の "RunWith" と等しくありません。
中心的な問題を指摘する解決策があります: JUnit バージョンが 1 つだけになるように、Eclipse Galileo の JUnit 4.5 を JUnit 4.3.1 に置き換えます: テスト実行クラスとテスト クラスは両方とも JUnit 4.3.1 を使用しています ( 「org.eclipse.jdt.junit4.runtime」にパッチを適用して、以前のjunitバージョンを受け入れるようにします)。
テスト クラスの JUnit 4.3.1 をバージョン 4.5 に置き換えることもできると思いますが、それはまだオプションではありません。
推測: クラスが異なる JUnit-Bundle に「由来する」ため、クラスローダーが異なります: バージョン 4.3.1 からの注釈を含むテストクラスと、バージョン 4.5 で実行されるテスト
私が知りたいこと: Eclipse にパッチを適用する (JUnit バージョンを置き換える) 以外に解決策はありますか? コマンドライン引数などはありますか? Eclipse に JUnit 4.3.1 を強制的に使用させるための設定はありますか?
上記の分析に関するヒントは大歓迎です!