jUnit 4.4 を使用してテストを実行し、一連の統合テストのセットアップとティアダウンを実行しようとしています。ティアダウンは確実に実行する必要があります。TestNG で他の問題が発生しているため、jUnit に移植し直すことを検討しています。テストの実行前とすべてのテストが完了した後に実行できるフックは何ですか?
注: ビルドには Maven 2 を使用しています。Maven のpre-
& post-integration-test
phases を使用しようとしましたが、テストが失敗すると Maven が停止して実行されずpost-integration-test
、役に立ちません。
ベストアンサー1
はい、テスト スイート内のテストの前後にセットアップ メソッドとティアダウン メソッドを確実に実行できます。コードで説明しましょう。
package com.test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {
@BeforeClass
public static void setUp() {
System.out.println("setting up");
}
@AfterClass
public static void tearDown() {
System.out.println("tearing down");
}
}
したがって、Test1
クラスは次のようになります。
package com.test;
import org.junit.Test;
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
}
...そして、似たようなものになると思いますTest2
。 を実行するとTestSuite
、次のようになります。
setting up
test1
test2
tearing down
したがって、セットアップ/ティアダウンはそれぞれすべてのテストの前と後にのみ実行されることがわかります。
注意: これは、テスト スイートを実行している場合にのみ機能し、Test1 と Test2 を個別の JUnit テストとして実行していません。Maven を使用しているとおっしゃっていましたが、Maven Surefire プラグインは、スイートの一部ではなく、テストを個別に実行します。この場合、各テスト クラスが拡張するスーパークラスを作成することをお勧めします。スーパークラスには、注釈付きの @BeforeClass メソッドと @AfterClass メソッドが含まれます。上記の方法ほどきれいではありませんが、うまくいくと思います。
失敗したテストの問題に関しては、失敗したテストでもビルドが続行されるように maven.test.error.ignore を設定することができます。これは継続的な方法としては推奨されませんが、すべてのテストが合格するまで機能するはずです。詳細については、Maven Surefire ドキュメント。