私のプロジェクトでは、すべてのテストの前にリポジトリのセットアップを行う必要があります。これは、いくつかのトリッキーな静的ルールを使用して行われます。しかし、すべてのテストの後にクリーンアップを実行する方法がわかりません。すべてのテストメソッドの数を参照する魔法の静的な数を保持したくないので、常に維持する必要があります。
最もありがたい方法は、すべてのテストの後に呼び出されるリスナーを追加することです。 JUnit4にはすでにそのインターフェイスがありますか?
編集:これは@BeforeClassと@AfterClassとは関係ありません。@ AfterClassで注釈されたメソッドが最後に呼び出されるかどうかを知る必要があります。
JUnit 4.9を使用しています。これは役立ちますか?:
import junit.framework.TestCase;
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({First.class,Second.class,Third.class})
public class RunTestSuite extends TestCase {
@BeforeClass
public static void doYourOneTimeSetup() {
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
}
編集:私のソリューションがあなたが探しているものであると私は非常に肯定的です(あなたが質問を誤解しない限り)。つまり、すべてのテストが実行された後の1つのティアダウンメソッド。リスナーは不要です。JUnitにはこの機能があります。ありがとう。
org.junit.runner.notification.RunListener の使用をお勧めします。例:
public class TestListener extends RunListener {
@Override
public void testRunStarted(Description description) throws Exception {
// Called before any tests have been run.
}
@Override
public void testRunFinished(Result result) throws Exception {
// Called when all tests have finished
}
}
JUnit Java doc。で直接読んでください。Mavenのsurefire(ユニットテスト)プラグインまたはフェイルセーフプラグイン(統合テスト)でも、次のコードをプラグイン構成に追加することで使用できます。
<properties>
<property>
<name>listener</name>
<value>com.innovatrics.afismq.it.TestListener</value>
</property>
</properties>
同じ問題が発生しました。
私の解決策:
Runtime.getRuntime().addShutdownHook(new Thread(() -> do_your_global_cleanup())));
スイートを使用する必要はなく、@ BeforeClassと@AfterClassを静的として追加するだけです
public class Tests {
@BeforeClass
public static void doYourOneTimeSetup()
{
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
@Test
public void testYourTestcase()
{
...
}
}
いつでもカスタムTestRunnerを作成できます。ただし、その前に、その必要性を評価する必要があります。 @BeforeClassと@AfterClassを使用することをお勧めします。私が指摘できるもう1つの例は、hibernateでユーザーが「import.sql」を使用して単体テストを実行できるようにする方法です。