JUnit - Ein Framework für Unit Tests

Richard Cyganiak, Daniel Schulze

Inhalt

JUnit installieren
Unit Tests mit JUnit schreiben
Tests ablaufen lassen
Tests zu TestSuites zusammenfassen
Testorganisation
Tips und Tricks
Quellen

JUnit installieren

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.

Unit Tests mit JUnit schreiben

Ein typischer Testfall besteht aus vier Schritten:

  1. Testobjekte ("Fixtures") erzeugen, Dateien öffnen, Datenbank- und Netzwerkverbindungen öffnen
  2. Operationen mit den Testobjekten durchführen
  3. Ergebnisse dieser Operationen mit den erwarteten Ergebnissen vergleichen
  4. (ggf. Dateien schließen, Verbindungen trennen, "aufräumen")

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!)

Tests ablaufen lassen

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 swingui User Interface

Das awtui User Interface
Das awtui User Interface

Das textui User Interface
Das textui User Interface

Tests zu TestSuites zusammenfassen

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.

Testorganisation

Tips und Tricks

Quellen

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