Ja, es ist möglich, Einrichtungs- und Abbauverfahren vor und nach Tests in einer Testsuite zuverlässig auszuführen. Lassen Sie mich im Code demonstrieren:
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");
}
}
Ihre Test1
Klasse würde also ungefähr so aussehen:
package com.test;
import org.junit.Test;
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
}
... und Sie können sich vorstellen, dass Test2
das ähnlich aussieht. Wenn Sie rannten TestSuite
, würden Sie bekommen:
setting up
test1
test2
tearing down
Sie sehen also, dass das Auf- und Abbauen nur vor bzw. nach allen Tests ausgeführt wird.
Der Haken: Dies funktioniert nur, wenn Sie die Testsuite ausführen und Test1 und Test2 nicht als einzelne JUnit-Tests ausführen. Sie haben erwähnt, dass Sie maven verwenden, und das todsichere Maven-Plugin führt Tests gerne einzeln und nicht als Teil einer Suite aus. In diesem Fall würde ich empfehlen, eine Oberklasse zu erstellen, die jede Testklasse erweitert. Die Oberklasse enthält dann die mit Anmerkungen versehenen Methoden @BeforeClass und @AfterClass. Obwohl nicht ganz so sauber wie die oben beschriebene Methode, denke ich, dass es für Sie funktionieren wird.
Für das Problem mit fehlgeschlagenen Tests können Sie maven.test.error.ignore so festlegen, dass der Build für fehlgeschlagene Tests fortgesetzt wird. Dies wird nicht als fortlaufende Übung empfohlen, sollte Sie jedoch funktionsfähig machen, bis alle Ihre Tests bestanden sind. Weitere Informationen finden Sie in der Dokumentation zu Maven Surefire .
post-integration-test
wenn ein Test fehlschlägt. Siehe auch diese Wiki-Seite .