Metamodeling
and its Applications
tud
[Tutorial als PDF inkl. abgedruckter Testsuite] [Archiv mit dem Quellcode und der Testsuite]

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: 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.