2012-02-25 28 views
2

私は、Java + Spring 3.0.1アプリケーションのためにいくつかのユニットtestngテストを書いています。テストクラスは、AbstractTestNGSpringContextTestsクラスを拡張します。maven testngは失敗しますが、Eclipseで動作します

STS 2.8.1(右クリック→実行→テスト)を使用して、すべてEclipseでうまく動作します。しかしコマンドラインからは失敗します。私はmaven 2.2.1を使用しています。私はpom.xmlファイルに特定のテストプラグインを定義していないので、私はデフォルトのバージョンを使用していると仮定します。

私は、テストチェンジオブジェクトの状態が変化しても、コマンドラインのテストメソッドは同時に実行されており、互いに衝突していると考えています。

しかし、mavenテストを順番に実行するオプションはありません。

私は更新

<dependency> 
    <groupId>org.testng</groupId> 
    <artifactId>testng</artifactId> 
    <version>6.1.1</version> 
    <scope>test</scope> 
</dependency> 

...しかし、私はTestNGの依存関係を指定した、テスト用プラグインを指定していないと述べた - 私は、問題を解決しました。 プロジェクトは、Eclipseでインポートして変更した別のプロジェクトに依存していましたが、.m2リポジトリにインストールされていませんでした。 これは、Eclipseでテストを実行すると、Eclipseワークスペースのプロジェクトから最新の変更が選択されたことを意味します。しかし、私がコマンドラインから実行したとき、古いバージョンのプロジェクトが.m2リポジトリから取得されました。

+0

テストクラスの例を教えてください。 Mavenはデフォルトでsurefireプラグインを使ってテストを実行します。 – tom

+0

私は彼らが非常に複雑で、リモートエンドポイントへのメッセージングチャネルのためのテストであり、モックオブジェクトを使用して遠隔エンドポイントから異なる結果を返すようにしたいと考えていません。私が言うことができるのは、各メソッドの上部に@Test注釈を使用することだけです。 – user1232555

+0

設定しない限り、テストは順番に実行されます。あなたはtestng '6.4'にアップグレードしてプラグインを' 2.12'にして、何か違いがあるかどうか確認することができます。 – Raghuram

答えて

1

実行する必要があるすべてのコードが1つのテストに含まれている必要はなく、完全にカプセル化されている必要がありますか?職場で私の上司は、あるテストが別のテストに決して依存してはならないと教えてくれました。

+0

これはテストの仕組みであり、相互に依存しません。テストではメッセージングチャネルから戻り値が返されるため、並行処理が問題になります。すなわち、あるテストはモックオブジェクトを添付して 'x'を返し、別のテストはモックオブジェクトを添付して 'y'を返す。両方を同時に実行すると、予期しない結果が発生します。また、私は各テストの最後に嘲笑されたオブジェクトを削除するように注意してきました。 – user1232555

+0

あなたは今何を意味しているのか分かります。 – thescientist

0

デフォルトでは、surefireプラグインはMavenのテスト段階で使用されます。パラレル設定のデフォルト値はfalseです。スレッドIDを印刷して、それらが同じスレッドで実行されているのか、別のスレッドで実行されているのかを識別できます。そうでなければ、あなたのpomにsurefireプラグインを明示的に追加して、parallelをfalseと指定することができます。 また、テストの順番が異なる場合があります。予期しない結果が出ることがありますか?

関連する問題