データベースを実行する必要がある一連のテストがあります。実行の開始時にデータベースを作成し、最後に削除したいと考えています。
Maven から、 RunListenerを maven-surefire-plugin に追加しましたが、正常に動作します。また、 ismavenという名前のシステム プロパティ変数も追加しました。Maven からテストを実行すると、この変数は初期化されますが、Eclipse からテストを実行すると、この変数は null になります ( System.getPropertyで変数にアクセスします)。
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
すべてのデータベース テストは、@BeforeClass メソッドと @AfterClass メソッドを持つクラスから継承します。これらのメソッドは、テストが Maven によって実行されているか、またはismavenプロパティーの値をチェックする Eclipse によって実行されているかをチェックします。テストが maven によって実行されている場合、ismavenプロパティには値があり、それらは何でもします。しかし、テストが Eclipse によって実行されている場合、ismaven変数は null であり、データベースを開始 (@BeforeClass) または停止 (@AfterClass) します。
@BeforeClass
public static void checkIfStartDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, start the database
if (ismaven == null) {
startDatabase();
}
}
@AfterClass
public static void checkIfStopDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, stop the database
if (ismaven == null) {
stopDatabase();
}
}
このソリューションは問題を 100% 解決するわけではありませんが、実装すると、Eclipse を使用して 1 つの JUnit クラスのすべてのテストを実行 (およびデバッグ) でき、Maven を使用してプロジェクトのすべてのテストを実行することもできます。すべてのテストの実行前または実行後にコードを 1 回実行します。