Ich fand die richtige Verwendung (oder zumindest die Dokumentation) von JUnit sehr verwirrend. Diese Frage dient sowohl als zukünftige Referenz als auch als echte Frage.
Wenn ich richtig verstanden habe, gibt es zwei Hauptansätze zum Erstellen und Ausführen eines JUnit-Tests:
Ansatz A (JUnit 3-Stil): Erstellen Sie eine Klasse, die TestCase erweitert, und starten Sie die Testmethoden mit dem Wort test
. Wenn Sie die Klasse als JUnit-Test (in Eclipse) test
ausführen , werden alle Methoden, die mit dem Wort beginnen, automatisch ausgeführt.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Ansatz B (JUnit 4-Stil): Erstellen Sie eine 'normale' Klasse und stellen Sie @Test
der Methode eine Anmerkung voran . Beachten Sie, dass Sie die Methode NICHT mit dem Wort starten müssen test
.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Das Mischen der beiden scheint keine gute Idee zu sein, siehe z. B. diese Frage zum Stapelüberlauf :
Nun meine Fragen:
- Was ist der bevorzugte Ansatz oder wann würden Sie einen anstelle des anderen verwenden?
- Ansatz B ermöglicht das Testen auf Ausnahmen, indem die Annotation @Test wie in erweitert wird
@Test(expected = ArithmeticException.class)
. Aber wie testen Sie bei Verwendung von Ansatz A auf Ausnahmen? Bei Verwendung von Ansatz A können Sie eine Reihe von Testklassen in einer Testsuite wie folgt gruppieren:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Dies kann jedoch nicht mit Ansatz B verwendet werden (da jede Testklasse TestCase unterklassifizieren sollte). Was ist der richtige Weg, um Tests für Ansatz B zu gruppieren?
Bearbeiten: Ich habe die JUnit-Versionen zu beiden Ansätzen hinzugefügt
extends TestCase
und dann jeden Test auch kommentiert,@Test
nur um die Dinge zu verwirren. :)