FEST (Fixtures for Easy Software Testing) ist ebenfalls wie Abbot, Jemmy oder UISpec4J ein Tool, mit dem grafische Benutzeroberflächen getestet werden können. FEST nutzt als Grundlage TestNG oder JUnit. Es werden die User-Interaktionen auf der Oberfläche simuliert und abgefragt. FEST besteht aus mehreren Modulen, die jeweils separat heruntergeladen und genutzt werden können:
Zum Testen der Oberflächen werden sogenannte Fixtures angelegt, die eine Schnittstelle zu den nativen Java-Swingkomponenten zur Verfügung stellen, um diese entsprechend zu testen.
FEST bietet eine sehr gute Möglichkeit, um schnell und effektiv grafische Benutzeroberflächen zu testen. Als Grundlage kann wahlweise JUnit oder TestNG verwendet werden. FEST bietet neben den Swingtests die Möglichkeit, Assert-, Reflect- oder Mocktests durchzuführen. Der Aufbau der Herstellerseite ist sehr gut und übersichtlich. Die dort hinterlegte Dokumentation bietet einen kurzen und guten Überblick über die Funktionalität, ist aber an einigen Stellen sehr kurz geraten. Sind die anfänglichen Probleme mit der Namensfindung beseitigt, lassen sich mit dem Tool grafische Elemente einfach und schnell testen. Besonders gut gelungen sind die Implementierungen der Eingabe-, Ausgabe- und Überprüfungsmethoden, die für fast alle Swingelemente realisiert wurden. Diese lassen sich sehr einfach und intuitiv nutzen, was den Umgang mit FEST erheblich vereinfacht.
FEST wird hauptsächlich von Testern und Entwicklern zum Testen von grafischen Benutzeroberflächen verwendet. Solche Tools eignen sich besonders gut für oft zu wiederholende Tests, die ein häufiges Klicken auf Buttons, Menüs und andere grafische Elemente erfordern. Der Computer kann diese Tests automatisch abarbeiten und ist wesentlich schneller als ein Mensch, der die Maus oder Tastatur bedient. Mit FEST lassen sich Tests schneller und automatisiert durchführen.
FEST wird als Jar-Datei dem eigenen Javaprojekt hinzugefügt und ist somit plattformübergrifend einsetzbar.
Die Installation ist sehr einfach. Es muss kein Installer ausgeführt werden. Lediglich die heruntergeladene Jar-Datei muss dem eigenen Projekt hinzugefügt werden. Anschließend können die FEST-Klassen für eigene Tests genutzt werden.
Die Dokumentation von FEST liegt in englischer Sprache vor und befindet sich ausschließlich auf der Herstellerwebseite. Im eingerichteten Wiki auf der Webseite unterteilt sich die Dokumentation in verschiedene Rubriken:
In jeder Rubrik werden kleine Beispiele vorgestellt, die zeigen, wie mit der entsprechenden Funktion von FEST umgegangen werden kann. Die Beispiele werden leider nur sehr kurz beschrieben, bieten aber für einen erfahrenen GUI-Tester einen knappen und guten Überblick. Eine ausführliche Beschreibung fehlt leider auf der Webseite. Zusätzlich wird eine JavaDoc-Dokumentation von FEST angeboten. Die Beschreibungen der Klassen und Methoden sind sehr ausführlich und gut lesbar. Sehr gut gelungen ist der Bereich "Getting Started". Hier wird gut beschrieben, wie FEST installiert und eingerichtet werden muss, um GUI Elemente zu testen.
Die Projektwebseite wird in regelmäßigen Abständen aktualisiert und mit neuen Features oder Informationen gefüllt.
Bezüglich FEST gibt es zwei wichtige Webseiten, zum einen die Google-Code-Seite, auf welcher der Quellcode gehostet wird, sowie das PMWiki, in dem
wichtige Beschreibungen und Tutorials zu finden sind.
Letzte Aktualisierungen:
Auf der Google-Code-Seite existiert eine Rubrik "Links", in welcher sehr informativ auf verschiedene Software-Publikationen verwiesen wird.
Auf der Webseite des Herstellers befindet sich ein Wiki, welches einen sehr guten Einblick in die Software gewährleistet. In verschiedenen Bereichen wird die Software anhand kurzer Beispiele sehr gut erklärt. Zusätzlich wird hier pro Paket die entsprechende JavaDoc publiziert. Auf der Google-Code-Seite des Projektes hat man die Möglichkeit, die Autoren der Software direkt per E-Mail zu kontaktieren. Für das Projekt existiert eine Google Group, der man beitreten kann, um Fragen zu stellen oder beim Projekt mitzuarbeiten.
Die intuitive Nutzbarkeit von FEST ist sehr gut. Mit Hilfe des PMWikis erhält man einen sehr schnellen und guten Einblick in die Funktionalität der Software. Zum Testen werden sogenannte "Fixture Objekte" der jeweiligen Swing-Komponente angelegt. Mit diesen Fixture-Objekten kann die native Funktionalität der Swing-Komponenten getestet werden. Wird das FEST-Assertion Modul genutzt, können die bekannten assert Methoden aus JUnit verwendet werden, um Ergebnisse zu verifizieren. Nutzt man FEST innerhalb von Eclipse oder einer anderen IDE, ist die Codecompletion auch hier eine sehr nützliche Hilfe, da die entsprechenden Testmethoden, welche zur Verfügung stehen, angezeigt werden.
Die Automatisierung bei FEST erfolgt über die implementierten Testklassen. Diese laufen vollständig automatisiert ab und erwarten keinerlei Interaktion des Testers.
Laufen die Tests erfolgreich durch, bekommt der Nutzer lediglich den grünen Balken von JUnit zu sehen. Bricht ein Test mit einem Fehler ab,
wird eine entsprechende Exception von FEST generiert und dem Nutzer angezeigt. Die Exceptions sind hilfreich und lassen sich
sehr gut lesen. Folgende Darstellung zeigt ein Beispiel, für den Fall, dass eine Komponente nicht gefunden werden konnte:
<dependency>
-Elements realisiert. Davor müssen die Fest-Bibliotheken noch in das lokale Repository von Maven übertragen werden. Die folgenden Befehle erledigen diesen Aspekt:mvn install:install-file -DgroupId=fest-assert -DartifactId=fest-assert -Dversion=1.3 -Dfile=fest-assert-1.3.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-mocks -DartifactId=fest-mocks -Dversion=1.0 -Dfile=fest-mocks-1.0.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-reflect -DartifactId=fest-reflect -Dversion=1.2 -Dfile=fest-reflect-1.2.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-swing -DartifactId=fest-swing -Dversion=1.2 -Dfile=fest-swing-1.2.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-util -DartifactId=fest-util -Dversion=1.1.4 -Dfile=fest-util-1.1.4.jar -Dpackaging=jar -DgeneratePom=true
mvn test
wird der Testfall angestoßen und ausgeführt. Die Ergebnisse lassen sich dann im Target
-Verzeichnis finden.
FEST Eclipse Workspace
Um FEST innerhalb von Eclipse zu verwenden, müssen die entsprechenden Jar-Dateien zum Classpath hinzugefügt werden.
Anschließend werden die benötigten Pakete mit Imports der JUnit Klasse hinzugefügt:
In den Methoden setUp() und tearDown() von JUnit wird ein FrameFixture-Objekt initialisiert. Mit Hilfe
dieses Objektes können Swing-Elemente auf dem Fenster lokalisiert und getestet werden.
Jetzt müssen, wie von JUnit gewohnt, Testmethoden implementiert werden, die einen entsprechenden Teil der GUI testen sollen.
Mit Hilfe des FrameFixture-Objektes wird auf dem Hauptframe das entsprechende Element (hier ein JButton) mit seinem Namen angesprochen, um anschließend eine Aktion (click) auf diesem Element auszuführen.
In der Methode "checkComboBox()", wie in diesem Beispiel zu sehen ist, wird der Eintrag "Professor" mit Hilfe der Methode "selectItem("Professor")" selektiert
und anschließend mit "requireSelection("Professor")" überprüft ob dieser nun auch wirklich in der ComboBox ausgewählt ist.
Das Ergebnis der "requireXXX()"-Methoden wird dann an JUnit weitergereicht und von diesem als TestCase protokolliert.
FEST stellt für alle grundlegenden Java Swingelemente Eingabe-, Ausgabe- und Überprüfungsmethoden zur Verfügung.
Ein wichtiger Hinweis, der unbedingt zu beachten ist:
FEST spricht die Swingelemente über ihre Namen an, die bei der Initialisierung verwendet wurden (hier z.B. "Count", "Reset").
Leider bricht FEST hierbei mit folgender Fehlermeldung ab:
Der grüne Balken markiert das Objekt, so wie es in der GUI-Klasse angelegt wurde, mit seinem Namen. Der rote Balken zeigt an,
dass FEST dieses Objekt unter dem Namen nicht finden kann und setzt den Wert auf "null".
Das Problem lässt sich durch folgende Zeilen in der GUI-Klasse lösen:
Jedes zu testende Swingelement wird mit einem Namen versehen, damit die Werte innerhalb von FEST nicht null sind.
Bekommen die GUI-Elemente mit der Methode "setName" entsprechend einen Namen zugeordnet, so laufen die Tests mit FEST fehlerfrei durch: