Richard Cyganiak, Daniel Schulze
JUnit installieren
Unit Tests mit JUnit schreiben
Tests ablaufen lassen
Tests zu TestSuites zusammenfassen
Testorganisation
Tips und Tricks
Quellen
Gute IDEs wie JBuilder und Eclipse unterstützen JUnit "out-of-the-box", es muss nichts installiert werden!
Für die notepad-, UltraEdit- und vi-Benutzer: Erstmal JUnit hier runterladen und unzippen. Dann JUnit in den Classpath einbinden, z.B. unter Windows am DOS-Prompt:
set classpath=%classpath%;c:\pfad\zu\junit\junit.jar
Testen ob die Installation geklappt hat:
java junit.swingui.TestRunner
Fertig.
Ein typischer Testfall besteht aus vier Schritten:
Man bringt die Testfälle in einer Klasse unter, die von junit.framework.TestCase abgeleitet wird.
In der Methode setUp() werden die Fixtures erzeugt (Schritt 1). Diese Methode wird vom Framework automatisch vor jedem Testfall aufgerufen.
Die einzelnen Testfälle, welches dieses Fixture benutzen, bringt man in Methoden mit Namen testXXXX() unter (Schritte 2 und 3).
Zum Überprüfen der Ergebnisse (Schritt 3) stellt JUnit eine Reihe von Methoden zur Verfügung:
assertTrue(boolean) assertEquals(foo, bar) assertNotNull(Object) assertNull(Object) assertSame(Object, Object) fail()
Details zu diesen Methoden findet man in den JUnit-javadocs.
In der Methode tearDown() kann man das Fixture aufräumen (Schritt 4).
Beispiel: EuroTest.java (als HTML) und die getestete Klasse Euro.java (als HTML) (mit einem Fehler!)
JUnit hat drei User Interfaces:
Zum Starten der Tests gibt es mehrere Möglichkeiten.
Entweder ruft man JUnit direkt von der Kommandozeile auf:
javaw junit.swingui.TestRunner mypackage.MyTest javaw junit.awtui.TestRunner mypackage.MyTest java junit.textui.TestRunner mypackage.MyTest
Oder man lässt JUnit aus der main()-Methode der Testklasse starten:
public static void main(String[] args) { junit.swingui.TestRunner.run(EuroTest.class); }
java mypackage.EuroTest
In jedem Fall muss junit.jar im classpath stehen!
Und so sieht es dann aus:
Das swingui User Interface
Das awtui User Interface
Das textui User Interface
Dazu fügt man in jede TestCase-Klasse folgende Methode ein (TestCaseName durch Klassenname ersetzen:
public static Test suite() { return new TestSuite(TestCaseName.class); }
Nun leitet man eine neue Klasse von TestCase ab mit folgender Methode:
public static Test suite() { TestSuite mySuite = new TestSuite(); mySuite.add(MyTestCase1.suite()); mySuite.add(MyTestCase2.suite()); mySuite.add(MyTestCase3.suite()); mySuite.add(MyTestCase4.suite()); return mySuite; }
Diese Klasse fasst die verschiedenen TestCases zu einem Test zusammen und kann wie jeder andere TestCase gestartet werden.
Vergessen sie nicht Fehlersituationen zu testen, z.B. Exceptions (werden sie dort geworfen wo man will und unter der Bedingung die man will). Typischer Code:
try { myObject.shouldThrowSomeException(); fail("should have thrown SomeException"); } catch (SomeException e) {}
www.junit.org - die JUnit-Homepage.
Frank Westphal: Unit Testing mit JUnit. http://www.frankwestphal.de/UnitTestingmitJUnit.html
Eine sehr gute deutschsprachige Einführung in JUnit. Das Euro-Beispiel stammt von dieser Seite.
Erich Gamma, Kent Beck: JUnitTest Infected: Programmers Love Writing Tests. http://junit.sourceforge.net/doc/testinfected/testing.htm
Sehr gute Einführung von den JUnit-Programmierern.
Martin Fowler: Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999