Tutorial: Unit-Tests schreiben
Unit-Tests schreiben
Das Schreiben von Unit-Tests ist eine einfache Sache, es lohnt sich aber das an kleinen Beispielen zu üben bis es locker aus dem Handgelenk kommt. Unit-Tests haben viele Aspekte und Facetten, wir fangen mal mit dem einfachsten Fall an: Testen einer einzelnen Funktion/Methode.
Funktion für das Tutorial wählen
Für das Tutorial wähle zunächst eine einfache Funktion. Sie sollte überschaubar sein, aber eine Reihe unterschiedlicher Varianten haben die sich zu testen lohnen. Als Beispiel nehmen wir hier die Berechnung des arithmetischen Mittels (aka der Durchschnitt) einer Reihe von Zahlen.
Um es einfacher zu machen, sind für die Eingabe nur ganze Zahlen erlaubt. Das Ergebnis ist in der Regel keine ganze Zahl mehr.
Die zu implementierende Methode habe die Signatur
float schnitt(int[] zahlen);
oder
float schnitt(int... zahlen);
Funktion implementieren
Schreibe nun eine Klasse mit einer Methode die die Funktion berechnet.
Normalerweise schreibt man Unit-Tests während man die Funktionalität entwickelt. Da für dieses Tutorial die Unit-Tests im Fokus stehen, ignorieren wir das mal. Die Implementierung darf also bereits erfolgt sein.
Unit-Tests schreiben
Lege nun eine Unit-Test-Klasse an und schreibe Tests dazu. Lies dazu die Abschnitte "Regeln..." und "Aufbau..." in Gestaltung von Unit-Test
Frage Dich dabei
- Was sollen die Tests erreichen?
- Was muß getestet werden, welche Tests benötige ich?
- Wieviele Test sind nötig, wann habe ich genug getestet?
- Woher bekomme ich Testdaten, was ist dabei wichtig?
Das wirkliche Leben
Unit-Tests nach Abschluß der Implementierung zu schreiben ist nicht empfehlenswert. Zunächst einmal hat dazu (fast) kein Entwickler Lust, sich nach der Implementierung noch mit einem Code zu beschäftigen.
Vor allem aber hat ein Programm ohne Unit-Tests die Tendenz sich so zu entwickeln, daß es sich gar nicht richtig testen läßt. Unser Beispiel ist ist einfach und überschaubar. "Echte" Software wird im Laufe der Zeit erweitert und angepaßt. Oft genug wird der Code dann irgendwo reingehackt; die entstehenden Methoden werden sehr schnell sehr komplex und sind dann nicht mehr richtig zu testen.
Deshalb ist es empfehlenswert, Unit-Tests während der Entwicklung zu schreiben. Das ist auch die Voraussetzung für modernere Programmiertechniken wie agile Entwicklung und TDD. Ein paar Anmerkungen dazu finden sich hier.