1 Einführung
Dieses Tutorial gibt einen kurzen Einblick in
JUnit
4. Als weiteres Einführungsdokument können wir
JUnit 4.0 in 10 minutes empfehlen.
Um dieses Tutorial durcharbeiten zu können, sollten Sie mit der
Bedienung von Eclipse und der Programmierung in Java vertraut sein.
Tiefergehendes Wissen über Qualitätssicherung ist nicht
erforderlich.
1.1 Was ist JUnit?
JUnit ist ein Framework das einem
Entwickler ermöglicht, relativ schnell
Unittests zu
schreiben und zu jedem Zeitpunkt eine Sammlung von Tests -eine
sogenannte
Testsuite- automatisch ablaufen zu lassen.
JUnit bietet unter anderem verschiedene Methoden (wie z.B.,
assertTrue(),
assertFalse(),
assertEquals()) , um
leicht Bedingungen im Code nachzuprüfen und viele Annotationen
(Annotationen erfordern allerdings Java 5) womit man Methoden als
Test,
Setup,
Teardown oder
Ignored
auszeichnen kann.
Um eine Klasse zu testen, werden in der Regel folgende Methoden
erstellt:
- eine Setup-Methode, die alle nötigen Objekte anlegt und
auf den für den Test nötigen Ausgangszustand bringt.
- eine Reihe von Tests, die die eigentlichen Tests
beinhalten.
- eine Teardown-Methode, um aufzuräumen.
Mittels einer GUI ist es dann möglich die Tests
automatisch ablaufen zu lassen, um sich die Ergebnisse und Ursachen im
Falle eines Fehlschlags anzeigen zu lassen. Die Wirkungsweise von
JUnit 4 wird im Abschnitt
3 anhand von
Beispielen näher erklärt.
1.2 Wieso sollte ich JUnit verwenden?
- Test Driven Development:
-
TDD ist
eine Entwurfsmethodik welche sich zunehmend verbreitet und zurecht
empfohlen wird. Sie gibt vor, dass man zuerst Tests schreibt,
und danach den Code implementiert, der diese Tests bestehen
muss. TDD ist einer der Kernbestandteile von XP
(eXtreme
Programming) und wurde mittlerweile von den meisten agilen
Vorgehensweisen aufgegriffen. JUnit eignet sich hervorragend für eine
Umsetzung von TDD und unterstützt den Entwickler so dabei, sich über
Gestalt und Zweck einer Methode oder Klasse im Klaren zu werden. Dabei
sind Ignore-Annotationen sehr hilfreich, denn sie ermöglichen
es, einzelne Tests kurzfristig auszuschalten, solange man noch an der
dazugehörigen Implementierung schreibt.
- Regressiontesting:
-
Eine
Regressionstestsuite
zu schreiben, ist ohne den Einsatz von Tools wie JUnit nicht denkbar.
Regressionstests werden nach jeder Änderung ausgeführt und
gewährleisten so, dass nach Änderungen am Programm keine ungewollten
Seiteneffekte die Korrektheit der alten Funktionalität gefährden. Für
grössere Projekte ist es aus Zeitgründen einfach nicht möglich eine
Testsuite immer wieder von Hand auszuführen.
2 Installation und Verwendung mit Eclipse
Eclipse 3.2 enthält bereits JUnit 4.1.
Sie müssen lediglich ein neues Projekt anlegen, auf
Project
rechts-klicken und
New → JUnit Test Case auswählen.
In dem dann erscheinenden Dialog kann man
New JUnit 4 test
auswählen. Wenn unten im Fenster eine Warnung angezeigt wird, dass JUnit 4
sich nicht im
build path befände, einfach auf
Click
here klicken und
OK auswählen um das Problem zu beheben. Danach den
Klassennamen als
JUnitHelloWorld angeben und den folgenden Code
eingeben:
import org.junit.Test;
import static org.junit.Assert.*;
public class JUnitHelloWorldEclipse3_2 {
@Test
public void testHelloWorld() {
String s = "HelloWorld";
assertEquals("Just a test to see if everything works ...", "HelloWorld", s);
}
}
Jetzt auf die Klasse im
Package Explorer rechts-klicken, und
Run As → JUnit Test auswählen, um den Test ablaufen
zu lassen.
Falls Sie eine ältere Version von Eclipse benutzen wollen, lesen Sie
bitte die folgenden Abschnitte. Ansonsten können Sie mit Abschnitt
3 weitermachen.
2.1 JUnit 4 runterladen
Unter
www.junit.org auf Download
gehen und JUnit 4 auswählen. Nach dem Entpacken die Datei
junit-4.1.jar in einem Verzeichnis Ihrer Wahl speichern.
2.2 In Eclipse integrieren
Ein neues Java-Projekt erstellen oder ein schon Bestehendes öffnen
bzw. auswählen. Auf
Project → Properties klicken,
Java Build Path, Libraries auswählen, und auf
Add
External JARs klicken. Jetzt zu
junit-4.1-jar navigieren und
auswählen.
Okay drücken.
Eine neue Klasse
JUnitHelloWorld erstellen und folgenden Code
eingeben:
import org.junit.Test;
import static org.junit.Assert.*;
import junit.framework.JUnit4TestAdapter;
public class JUnitHelloWorldEclipseOld {
@Test
public void testHelloWorld() {
String s = "HelloWorld";
assertEquals("Just a test to see if everything works...", "HelloWorld", s);
}
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(JUnitHelloWorldEclipseOld.class);
}
}
Jetzt auf die Klasse im
Package Explorer rechts-klicken, und
Run As → JUnit Test auswählen, um den Test ablaufen
zu lassen.
Der
JUnit4TestAdapter, der die
suite()-Methode zurückgibt, wird
benötigt, um die neuen JUnit4-tests mit den alten JUnit-runners
ablaufen zu lassen.
3 Beispieltestsuite für ein TicTacToe-Spiel
Anhand der folgenden Beispieltests für ein einfaches
TicTacToe-Spiel
werden die wichtigsten Features von JUnit erklärt. Um die Beispiele
auf älteren Versionen von Eclipse ablaufen zu lassen, müssen Sie den
Import und die
suite()-Methode für den JUnit4TestAdapter
ergänzen (siehe Abschnitt
2.2).
In der Qualitätsicherung unterscheidet man zwischen
whitebox-tests
und blackbox-tests. JUnit eignet sich für beide Testarten und
in den folgenden Beispielen, sehen wir uns einen White-Box-Test für
das Model, und einen Black-Box-Test für den View an.
Das
Archiv mit dem Quellcode und der Testsuite steht zum Download bereit. Zusätzlich bieten wir eine
PDF-Version des Tutorials an, in der die Testsuite mit abgedruckt ist.
3.1 White-Box-Test für das Model
Die folgenden Features von JUnit 4 werden verwendet und erklärt:
- @BeforeClass und @AfterClass:
-
Methoden, die vor und nach allen Tests ausgeführt werden.
- @Before und @After:
-
Methoden, die vor und nach jedem Test ausgeführt werden.
- @Test:
-
Die tatsächlichen Testmethoden.
- Assertmethoden:
-
Mittels der von JUnit zur Verfügung gestellten Methoden wie
assertTrue, assertEquals u.s.w. können Bedingungen im Code leicht
überprüft werden.
- Erwartete Exceptions:
-
In der Test-Annotation ist es möglich eine Exception anzugeben, die
der Test werfen sollte.
- @Ignore:
-
Methoden, die noch nicht bestehende Funktionalität testen, können
temporär ignoriert werden.
- Hilfsmethoden:
-
Es ist auch möglich beliebig viele normalen Methoden in der Klasse zu
benutzen.
3.2 Black-Box-Test für den View
In dem Beispiel wird ein Klick simuliert und in diesem Zusammenhang
einiges zur Testbarkeit einer Klasse erläutert.
Autor: Anthony Anjorin, 2006
File translated from
TEX
by
TTH,
version 3.76.
On 1 Nov 2006, 14:47.