JUnit 4 で条件付きでテストを無視する 質問する

JUnit 4 で条件付きでテストを無視する 質問する

はい、@Ignore注釈はテストケースを実行すべきでないことをマークするのに適しています。

ただし、実行時情報に基づいてテストを無視したい場合もあります。たとえば、特定の数のコアを持つマシンで実行する必要がある同時実行テストがある場合です。このテストが単一プロセッサ マシンで実行される場合、テストをパスするだけでは正しくないと思います (テストが実行されていないため)。また、テストに失敗してビルドが壊れるのは当然正しくありません。

そこで、実行時にテストを無視できるようにしたいのですが、これは正しい結果のように思えます(テストフレームワークはビルドをパスしますが、テストが実行されなかったと記録するため)。アノテーションではこの柔軟性が得られないことはほぼ確実で、問題のクラスのテストスイートを手動で作成する必要があると思います。ただし、ドキュメントにはこれについて何も触れられておらず、APIまた、これをプログラムでどのように行うのかも明確ではありません (つまり、アノテーションTestによって作成されたものと同等の のインスタンスまたは類似のインスタンスをプログラムで作成するにはどうすればよいでしょ@Ignoreうか)。

過去に同様のことをしたことがある人、または他にどうすればよいかという素晴らしいアイデアを持っている人がいたら、ぜひ教えてください。

ベストアンサー1

JUnit ではこれを実行時に実行しますorg.junit.Assume

 @Before
 public void beforeMethod() {
     org.junit.Assume.assumeTrue(someCondition());
     // rest of setup.
 }

@Beforeメソッド内またはテスト自体でこれを行うことができますが、@Afterメソッド内では行うことはできません。テスト自体で行うと、メソッド@Beforeが実行されます。クラスの初期化を防ぐために、内部で行うこともできます@BeforeClass

仮定が失敗すると、テストは無視されます。

編集: junit-ext@RunIfの注釈と比較すると、サンプル コードは次のようになります。

@Test
public void calculateTotalSalary() {
    assumeThat(Database.connect(), is(notNull()));
    //test code below.
}

言うまでもなく、Database.connect()この方法では、メソッドからの接続をキャプチャして使用する方がはるかに簡単です。

おすすめ記事