2016-04-03 23 views
5

私のプロジェクトにJUnitテストクラスがありますが、これは徐々に更新されています - 数週間おきにテストを追加し、テストのコードを変更することがあります。単体テストクラスが古いバージョンで動作しています

驚いたことに、eclipse JUnit Runner 4を使用してテストクラスを実行すると、新しいコードではなく古いコード(更新前)が実行されます。コードを変更したり、テストを追加したり削除したりすることはできますが、それでも古いコードは実行されます。

私は問題を特定して、今書いた単なるテストを実行しようとしましたが、スタックトレースなしで悪名高い "Unrooted tests"エラーが発生しました。

JUnit runner response. test7() is indeed within the compiled test class

私はいくつかの研究を行なったし、ここではいくつかの他のスレッドによると、多くの人は、JUnitの3 \のJUnit 4の互換性に関して、この問題が発生したが、これはここにそうではありません - 私はすべてのテストに注釈を付けます@Testであり、私はTestCaseクラスを拡張していません。

クリーニング/すべてのEclipseプロジェクトのビルドは役に立ちません。 しかし、この問題は、自分のプロジェクトをmvn cleanでインストールしたときにはうまくいきますが、時間がかかりすぎます。 また、クラスの名前を変更すると(Alt + Shift + Rをeclipseで実行)、新しいコードがすぐに実行されますが、元の(有効な)名前に戻すと、古いコードが再び実行されます(WTF?)

ヘルプは高く評価されます。 10x

+1

古いコードを実行している場合は、古いコードがソースに含まれているか、コンパイル済みです。あなたはどこかで古いコードを持っていますか?おそらくクラスパスにある.jarでさえ? – Harald

+0

私はどこかでやると思いますが、Eclipseがそれをコンパイルしたと仮定すると、実行するように指示されたコードを実行するはずのEclipseランナーではありませんか? – KidCrippler

+2

テストランナーが 'target'の下でコンパイルされたクラスを使用しているが、Eclipseコンパイラーが別のフォルダー(デフォルトでは' bin')に出力しているようにEclipseを設定している可能性はありますか? Mavenビルドがなぜこの問題を解決するのか説明できるかもしれません。 – sisyphus

答えて

0

私は自分自身で問題を解決することができました(Harlardが寄稿したコメントに触発されています)。 私のプロジェクトのターゲットディレクトリを調べた後、テストクラスのディレクトリにテストのバイナリが含まれていないことに気付きました。 私はsrc/test/java内のクラスを間違って配置し、私のプロジェクトのパッケージ構造に適合しないパッケージ構造に置くことに気付きました。それらはsrc/test/javaの直接のサブディレクトリでした。 したがって、eclipseはそれらを正しい場所に置かず、バイナリを生成する唯一の方法はMavenビルドを実行することでした。 すべてのテストクラスを正しいパッケージ構造にリファクタリングした後、すべてが完全に機能しました。

+0

ありがとうございます。 '' class''を出力するには '.classpath'ファイルに' output'ディレクトリを明示的に指定しなければなりませんでした: '' class''; class = "src/test/java" output = "target/test-classes"/> '。それ以前は、 'output'部分がなく、' target'ディレクトリの下にコンパイルされたバージョンがありましたが、Eclipse内のJunit実行の正しい場所にはありませんでした。 –

0

もう1つの解決策は、プロジェクトの「ターゲット」フォルダを手動で削除して再構築することです。これはこの種のすべての問題を解決するはずです。

関連する問題