Sunday, 13. April 2008
Document-Driven-Development mit FIT
javatux, 14:58h
(eine kleine Einführung in das FIT-Framework)
Schon mal TDD (Test-Driven-Development) ausprobiert? Dann wird Ihnen auch sicherlich das FIT-Framework von Ward Cunningham gefallen, dass sich sehr gut mit dem TDD-Ansatz kombinieren lässt.
Basis von FIT sind Tabellen, die als Eingabe für automatische Testfälle dienen. Als Beispiel werden wir eine Tabelle mit Ports heranziehen, die wir etwas abändern werden, um unseren eigenen Rechner damit überprüfen zu können:
Die Tabelle aus Wikipedia wurde um die Spalte "Rechner" und "Status()" ergänzt. Am Anfang der Tabelle wurde noch eine Zeile mit einem sogenannten "Fixture" eingefügt. Dabei handelt es sich um eine Java-Klasse, die später vom FIT-Framework aufgerufen wird:
ColumnFixture ist eine Oberklasse von FIT, die den meisten Komfort im Umgang mit Tabellen bietet. Zwei Dinge sind wichtig für die Imlementierung:
Der zweite Parameter (result.html) gibt die Ausgabedatei an, in der das Ergebnis abgelegt wird. Das Ergebnis entspricht im Wesentlichen der Eingabedatei mit Ausnahme der Tabellen:
Ok, jetzt können wir uns der Implementierung der Status()-Methode widmen, um die roten Tabellen-Einträge wegzubekommen:
Unter der Annahme, dass die PortScanner.isActive()-Methode das Gewünschte leistet, sollten die roten Einträge nun grün werden:
Damit wissen wir nicht nur, dass Port 22 und 80 auf unserem Rechner aktiv sind, sondern haben auch die isActive()-Methode unserer PortScanner-Klasse getestet.
Sollen noch andere Rechner oder Ports getestet werden, wird die Tabelle entsprechend erweitert. Was aber, wenn wir eine Liste aller aktiven Ports vorgeben wollen? Für solch eine Überprüfung bietet sich die RowFixture an – aber das ist ein Thema für's nächste Mal.
stay tuned...
Schon mal TDD (Test-Driven-Development) ausprobiert? Dann wird Ihnen auch sicherlich das FIT-Framework von Ward Cunningham gefallen, dass sich sehr gut mit dem TDD-Ansatz kombinieren lässt.
Basis von FIT sind Tabellen, die als Eingabe für automatische Testfälle dienen. Als Beispiel werden wir eine Tabelle mit Ports heranziehen, die wir etwas abändern werden, um unseren eigenen Rechner damit überprüfen zu können:
de.aosd.PortScannerFixture | ||||
Rechner | Portnummer | Dienst | Beschreibung | Status() |
localhost | 20 | FTP-Data | Dateitransfer (Datentransfer vom Server zum Client) | inaktiv |
localhost | 22 | SSH | Secure Shell | aktiv |
localhost | 80 | HTTP | Webserver | aktiv |
Die Tabelle aus Wikipedia wurde um die Spalte "Rechner" und "Status()" ergänzt. Am Anfang der Tabelle wurde noch eine Zeile mit einem sogenannten "Fixture" eingefügt. Dabei handelt es sich um eine Java-Klasse, die später vom FIT-Framework aufgerufen wird:
public class PortScannerFixture extends ColumnFixture {
public String Rechner;
public int Portnummer;
public String Dienst;
public String Beschreibung;
public String Status() {
return "not implemented";
}
}
ColumnFixture ist eine Oberklasse von FIT, die den meisten Komfort im Umgang mit Tabellen bietet. Zwei Dinge sind wichtig für die Imlementierung:
- ich muss Attribute als "public" bereitstellen, die genauso wie die Tabellen-Überschriften heißen (Rechner, Portnummer, Dienst, Beschreibung);
- Tabellen-Überschriften, die wie Methoden-Aussehen (hier: Status()) müssen implementiert werden und einen String zurückliefern.
> java fit.FileRunner services.html result.html
0 right, 3 wrong, 0 ignored, 0 exceptions
Der zweite Parameter (result.html) gibt die Ausgabedatei an, in der das Ergebnis abgelegt wird. Das Ergebnis entspricht im Wesentlichen der Eingabedatei mit Ausnahme der Tabellen:
de.aosd.PortScannerFixture | ||||
Rechner | Portnummer | Dienst | Beschreibung | Status() |
localhost | 20 | FTP-Data | Dateitransfer (Datentransfer vom Server zum Client) | inaktiv expected not implemented actual |
localhost | 22 | SSH | Secure Shell | aktiv expected not implemented actual |
localhost | 80 | HTTP | Webserver | aktiv expected not implemented actual |
Ok, jetzt können wir uns der Implementierung der Status()-Methode widmen, um die roten Tabellen-Einträge wegzubekommen:
public String Status() throws UnknownHostException {
return PortScanner.isActive(Rechner, Portnummer) ? "aktiv" : "inaktiv";
}
Unter der Annahme, dass die PortScanner.isActive()-Methode das Gewünschte leistet, sollten die roten Einträge nun grün werden:
de.aosd.PortScannerFixture | ||||
Rechner | Portnummer | Dienst | Beschreibung | Status() |
localhost | 20 | FTP-Data | Dateitransfer (Datentransfer vom Server zum Client) | inaktiv |
localhost | 22 | SSH | Secure Shell | aktiv |
localhost | 80 | HTTP | Webserver | aktiv |
Damit wissen wir nicht nur, dass Port 22 und 80 auf unserem Rechner aktiv sind, sondern haben auch die isActive()-Methode unserer PortScanner-Klasse getestet.
Sollen noch andere Rechner oder Ports getestet werden, wird die Tabelle entsprechend erweitert. Was aber, wenn wir eine Liste aller aktiven Ports vorgeben wollen? Für solch eine Überprüfung bietet sich die RowFixture an – aber das ist ein Thema für's nächste Mal.
stay tuned...
Links:
- Beispiel-Projekt: portscanner080413 (zip, 5 KB)
- FIT: fit.c2.com
- Fitnesse: www.fitnesse.org
... comment