Wie geht man testgetrieben vor, wenn man AJAX einsetzen will oder muss?
Eine Möglichkeit, JavaScript zu testen ist GWT: GWT übersetzt Java-Code nach Java-Script. Dann muss man nur den Java-Code testen.
Rhino als JavaScript-Engine kann helfen, ohne Browser zu testen.
JsTester erlaubt das JavaScript-Testen mit der Rhino-Engine ohne Browser. JsTester ist in JUnit integriert.
Scriptaculous ist ein Test-Framework, das die Tests im Browser ausführt. So kann man direkt auch die Browser-Unterschiede adressieren. Die Automatisierung ist über Rake (so eine Art Ruby-Ant) möglich. Auf jeden Fall ist die Automatisierung von Test-Suiten, z.B. im Continuous-Build, nicht ganz einfach.
Mit Scriptaculous schreibt man den Unit-Test als Java-Script-Code mit in die Web-Seite. Der Test sieht dann JUnit sehr ähnlich.
JsMock ist ein Mock-Framework für JavaScript. JsMock ist Easy-Mock sehr ähnlich.
Jetzt kommen Kunden-/Akzeptanztests. Selenium erlaubt das "Fernsteuern" des Browsers. Die Art und Weise, wie man die Tests aufschreibt, sieht der ActionFixture aus FIT sehr ähnlich.
Mit Canoo-WebTest ist was Ähnliches möglich. Neuerdings kann man WebTest auch mit Groovy einsetzen. (Ich bin jetzt insgesamt im vierten Vortrag und in allen vier Vorträgen kam Groovy vor.)
Aha, jetzt kommen auch FIT und Fitnesse, wo man die Tests in HTML-Tabellen beschreibt.
Jetzt kommt die Demo "Party Locator" mit Google-Maps-Meshup. Der Test wird mit Scriptaculous geschrieben. Der Test nutzt Mocks für den Google-Maps-Zugriff. Dafür braucht man erstmal gar kein Framework, weil man in Java-Script Objekte immer ganz einfach ersetzen kann - weil JavaScript Prototype-basiert ist. Der Test sieht entsprechend elegant aus.
Wie testet man asynchroner Code?
Variante 1: Man schaltet die Asyhchronität für den Test aus, mit der Hilfe von Mocks.
Variante 2: Die Testframeworks kennen immer nur den Hauptthread. Man kann also im Unittest Asynchronität testen. Also testet man die Asynchronität mit Akzeptanztests.
Ajax-Aufrufe testet man natürlich auch mit Mocks.
Der Akzeptanztest ist mit FIT formuliert. Die Fixtures steuern den Browser direkt mit Selenium an. Sieht alles sehr cool aus.
Was ich noch nicht kannte, ist dass man in den FIT-Tests am Anfang globale Imports machen kann. Dann hat man es einfacher und übersichtlicher, wenn man am Anfang der HTML-Tabellen die Fixture-Klasse benennt.
Die FIT-Tests schreibt man i.d.R. mit Word - insbesondere wenn die Kunden die Tests schreiben oder ändern. Fitnesse ist auch lustig, aber i.d.R. ungeeignet, wenn der Kunde auch Tests schreiben oder ändern soll.
Debugging im Browser macht man heute mit Firebug für Firefox. Für andere Browser gibt es ähnliche Lösungen, die aber nicht ganz so gut sind.
Fazit: Unit- und Akzeptanztests und testgetriebenes Vorgehen funkioniert auch mit JavaScript und AJAX. Natürlich muss man weiter auch manuell testen, um z.B. die Darstellung zu prüfen.
Zitat aus der Eröffnungsrede: "Niemand von uns will JavaScript programmieren müssen." Der Vortrag von Johannes und Marco zeichnet ein anderes Bild. Die Code-Beispiele sehen nicht weiter schlimm aus. Als Programmiersprache ist JavaScript nämlich eigentlich gar nicht schlecht.
Dienstag, 24. April 2007
Abonnieren
Kommentare zum Post (Atom)
2 Kommentare:
Haben Marco und Johannes irgendetwas zum Thema JSF und TDD-Ajax (z.B. Ajax4JSF) gesagt?
Nein, JSF haben sie gar nicht thematisiert.
Kommentar veröffentlichen