Maven と TestNG を使用しています。特定のメソッドが TestNG/JUnit テストケースまたはメインの Java コードによって呼び出されている場合、実行時に区別する方法
2 に答える
いくつかのコメントはこれをほのめかしていますが、テスト中はある方法で機能し、アプリがスタンドアロンで実行されている場合は別の方法で機能するステートメントを組み込むことは、一般的に非常に貧弱な方法です。これにより、アプリがテストに合格しても本番環境では失敗する可能性が高くなります。
代わりに、なぜこの区別をしたいのかを考えるべきです。一般に、それは何らかの依存オブジェクトのためか、何らかの種類の入力によるものです。このような場合、構成を介してテスト中に依存オブジェクトをクラスに挿入できるようにクラスを設計することをお勧めします。変更されるのは構成だけです。テスト対象のクラスは、依存するクラスを互いに区別してはなりません。代わりに、それらのインターフェイスを操作するだけで、テスト用のモック クラスを作成できます。
入力を受け入れるとき、入力ソースをリダイレクトして、スクリプト化された入力を受け取ります。
データベースの場合は、テスト用に構成されたインメモリ DB などにリダイレクトします。
このアプローチにより、記述したコードの品質が大幅に向上し、単体テストをすり抜けるバグの可能性が減少することがわかります。
実行時に、コードが単体テストを実行することはありません。コードから明示的に呼び出す場合を除き、決して実行しないでください。
単体テストは、手動で、または Maven ライフサイクルのテスト段階でのみ実行されます。