2016-10-03 9 views
1

私は、3つのテストクラス(TextModelTestLocalClassificationTaskTestModelFetcherTest)のプロジェクトを持っています。 個別に実行すると、それぞれが合格しますが、一度にすべてを実行すると(Eclipseから)、3番目のテスト(ModelFetcherTest)はすべてNullPointerExceptionで失敗します。驚くべきことに、テストされたクラス(ModelFetcher)に入れたブレークポイントでも日食は止まらないでしょう。JMockit @モックアノテーションによって他のテストが失敗する

3番目のクラスが失敗する原因を調べるために成功した各テストを無視しようとすると、2番目のテストクラス(LocalClassificationTaskTest)にModelFetcherのMockedフィールドがあり、 ModelFetcherTest

@Mocked ModelFetcher modelFetcher; 

:3テストクラスのCUTこれは

@Tested ModelFetcher modelFetcher; 

私は@Mocked注釈を除去しとの論理を置き換えます0(これはもっと面倒で冗長ですが、何でも)、今はすべて動作します。

この問題はeclipseでのみ発生したことに注意してください。すべてのテストはMavenで実行されたときに渡されました。 競争上の問題はなく、すべてのテストが合格し、一貫して失敗します(不運が関係しません)。

@Mocked注釈は、同じプロジェクト内の他のテストケースに影響を及ぼしますか?

+0

これらの3つのテストクラスのうち、 "正しい"順序で実行すると失敗を再現する[最小限のバージョン](http://stackoverflow.com/help/mcve)を表示する必要があります。それ以外の場合、実際の回答を提供する方法はありません。 –

答えて

0

あるクラスの@Mockedアノテーションが別のクラスに影響を与える唯一の方法は、jvmプロセスがクラス間で共有されている場合です。通常、各テストクラスは別々のjvmプロセスをforkして、それぞれのテストクラスにモックを隔離する必要があります。すべてのテストを一緒に実行するテストスイートのように聞こえるのは、単一のjvmを実行しているということです。 Eclipseを使用していませんが、this threadは、これがEclipseの他の人にとって問題であることを示しているようです。 Eclipseでビルド・スクリプトを変更して、別のJVMをフォークすることもできます。

+0

10x、私はスレッドをチェックアウトし、Eclipse内からJVMをフォークするための明確な解決策はありません。それ以上の調査では、指定されたプラグインなしでは実行できないことが示唆されています。私はチェックアウトして更新します。 – KidCrippler

+0

コンテキストの場合、gradleのデフォルトの動作は、すべてのテストを1つのjvmで実行することです。https://discuss.gradle.org/t/tests-should-use-one-jvm-per-test-class-not-per-プロジェクト/ 12774 – Novaterata

関連する問題