はい、@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()
この方法では、メソッドからの接続をキャプチャして使用する方がはるかに簡単です。