私たちのテスト環境には、ミドルウェア(CMSプラットフォーム、基盤となるDB、Elasticsearchインデックス)に依存するさまざまな統合テストがあります。
これらは自動化されており、Dockerを使用してミドルウェアを管理しているため、信頼性の低いネットワークの問題は発生しません。ただし、DBがクラッシュしてテストが失敗することがあります。
問題は、この障害の検出が大量のorg.hibernate.exception.JDBCConnectionException
メッセージを介して行われることです。これらはタイムアウトを介して発生します。その場合、何百ものテストがこの例外で失敗し、各テストが失敗するまでに数秒かかります。その結果、それはとり、年齢、完全に我々のテストのために。実際、通常、これらのビルドが完了したことを認識したら、手動で強制終了します。
私の質問:Maven駆動のJavaテスト環境で、特定の種類の例外に注意してプロセス全体を強制終了するようにビルドシステムに指示する方法はありますか?
我々は可能性があり、当社のコンテナをウォッチドッグとビルドプロセスそのように殺すが、私はのmavenでそれを行うためのクリーンな方法があります願っています。
JUnitの代わりにTestNGを使用する場合、他のテストに依存するものとしてテストを定義する他の可能性があります。
たとえば、上記の他の方法と同様に、データベース接続を確認し、他のすべてのテストをこのメソッドに依存するものとして宣言するメソッドを使用できます。
@Test
public void serverIsReachable() {}
@Test(dependsOnMethods = { "serverIsReachable" })
public void queryTestOne() {}
これにより、serverIsReachable
テストが失敗した場合、これに依存する他のすべてのテストはスキップされ、失敗としてマークされません。スキップされたメソッドは、最終レポートでそのように報告されます。スキップされたメソッドは必ずしも失敗ではないため、これは重要です。しかし、最初のテストがserverIsReachable
失敗したため、ビルドは完全に失敗するはずです。プラスの効果は、他のどのテストも実行されず、非常に速く失敗することです。
このロジックをグループで拡張することもできます。データベースクエリがいくつかのドメインロジックテストで使用されたとします。次のように、各データベーステストをグループで宣言できます。
@Test(groups = { "jdbc" })
public void queryTestOne() {}
ドメインロジックテストをこれらのテストに依存するものとして宣言します。
@Test(dependsOnGroups = { "jdbc.* })
public void domainTestOne() {}
したがって、TestNGはテストの実行順序を保証します。
これがテストをもう少し構造化するのに役立つことを願っています。詳細については、TestNG依存関係のドキュメントをご覧ください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加