2

Eclipse だけで開発された Java コードベースがあります。JUnit4 テストのセットがあり、実行予定時期に基づいて相互に排他的な 2 つのサブセットに分割できます。

  1. 「標準」テストは、開発者がテスト クラス (またはそれを含むプロジェクト) を右クリックし、[実行] > [JUnit テスト] を選択したときに実行する必要があります。これは、Eclipse での JUnit の動作とまったく同じです。
  2. 「ランタイム」テストは、アプリケーションが特定の状態で起動されたときに、アプリケーション内からプログラムによって呼び出された場合にのみ実行する必要があります。

2 つのタイプのテストは、同じ Java パッケージ内で互いに隣接している場合があります。(理想的には、それらを同じクラスに混在させることができますが、それは難しい要件ではありません。)

私の最初の解決策は、「ランタイム」テスト クラスに新しい @TestOnLaunch注釈を付けることでした。アプリケーションはこれらのクラスを見つけることができ@TestJUnitCore.run(Class<?>...). @Testただし、カスタム クラス アノテーションの意図に関係なく、Eclipse テスト ランナーは でアノテーションが付けられた任意のメソッドを実行するため、これらのテストは上記の「標準」シナリオに漏れます。

次に@TestOnLaunchアノテーションをメソッドレベルに移動してみました。JUnitCoreこれにより、「ランタイム」テストの「標準」シナリオへの「漏れ」が防止されますが、これらのテスト メソッドを実行できないようです。run.(Request)たとえば、正しいクラスとメソッドを対象とした は、おそらく注釈Requestが見つからないため (存在しないため)、「実行可能なメソッドがありません」で失敗します。@Test

この種の問題を解決する「JUnit の方法」があるかどうかを知りたいと思っています。Runnerおそらく、 ( で注釈が付けられたメソッドを実行するために)自分で作成することもできますが、@TestOnLaunchこれは正しいアプローチですか? もしそうなら、どうすれば、呼び出しに似た、一連のクラスを使用してプログラムでテストを開始できJUnitCore.run(Class<?>...)ますか?

4

2 に答える 2

2

まず、実行時に JUnit テストを使用している理由を再評価する必要があります。おそらくより良い解決策がある問題に対して、それは奇妙な選択のように思えます。

ただし、Filter実行するテストを決定するには、おそらくカスタム アノテーションと組み合わせて を使用することを検討する必要があります。

于 2013-09-09T00:56:18.670 に答える