Ich habe eine Reihe von Tests, die eine Datenbank ausführen müssen. Ich möchte die Datenbank zu Beginn ihrer Ausführung erstellen und am Ende entfernen.
Von Maven habe ich auch eine RunListener zum Maven-Surefire-Plugin hinzugefügt und es funktioniert gut. Und ich habe auch eine Systemeigenschaftsvariable mit dem Namen ismaven hinzugefügt. Wenn ich den Test von maven ausführe, wird diese Variable initialisiert, aber wenn ich die Tests von Eclipse aus führe, ist diese Variable null (ich greife auf die Variable mit System.getProperty zu).
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
Alle meine Datenbank Tests erben von einer Klasse, die eine @BeforeClass und eine @AfterClass Methoden hat. Diese Methoden überprüfen, ob der Test von Maven ausgeführt wird oder ob Eclipse den Wert der Eigenschaft ismaven überprüft. Wenn der Test von Maven ausgeführt wird, hat die ismaven Eigenschaft einen Wert und sie tun alles. Aber wird der Test von der Eclipse ausgeführt wird, die ismaven Variable ist null und sie beginnt (@BeforeClass) oder stoppt (@AfterClass) die Datenbank:
@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();
}
}
Diese Lösung 100% nicht lösen Ihre Problem, aber wenn Sie es implementieren, können Sie alle Tests einer JUnit-Klasse mit dem Eclipse ausführen (und debuggen) und Sie können auch alle Tests Ihres Projekts mit Maven mit der Garantie ausführen, dass Sie einmal ein Stück Code vor oder ausführen werden nach der Durchführung all Ihrer Tests.
Dies ist nicht genau das, was ich gesucht habe, weil ich nicht die Komplexität der Test-Implementierung für die Protokollierung erhöhen möchte. Ich wollte die Protokollierung außerhalb der Tests hinzufügen, aber die Lösung ist die beste bisher und das Ergebnis am Ende ist wie gewünscht. Ich markiere diese Antwort als Lösung. –