Automatisiertes Testen in Silverlight (und CI)

Veröffentlicht: 28. April 2011 von Christian Raschka in Testing
Schlagwörter:, , , , , , , ,

Auch unter Silverlight stellt sich die Frage, wie automatisiert getestet werden kann. Stefan Lieser schreibt in seinem Artikel Automatisiertes Testen und Silverlight darüber, dass die von Microsoft bereitgestellte Lösung nicht ausreichend ist. Da ich das genauso sehe, suchte ich nach einer Lösung mit der die Tests auch im Continuous Integration System ausgeführt werden können.

Glücklicherweise erlaubt es das Silverlight Unit Test Framework eigene Unittest Werkzeuge hinzuzufügen. Für NUnit gibt es das Projekt nunit-silverlight. Somit ist es möglich, NUnit anstelle von MSTest zu verwenden. Dazu ist laut Dokumentation nur (neben dem Hinzufügen der notwendigen DLLs) nur folgender Code notwendig:

Das löst aber leider noch nicht das Problem, dass für das Ausführen der Tests der Silverlight Testrunner im Browser ausgeführt werden muss. Um dieses Problem zu lösen, gibt es sogenannte Silverlight Test Runner. Eines dieser Werkzeuge ist Lighthouse. Dieser Runner ermöglicht es Silverlight Unittests von der Kommandozeile aus auszuführen. Voilà alles gelöst. Fast.

Denn leider kann Lighthouse in der jetzigen Fassung keine NUnit Tests ausführen. Aber es ließ sich leicht anpassen, dass Lighthouse nunit-silverlight verwenden kann. Hierzu muss der NUnit-Provider von nunit-silverlight hinzugefügt werden. Dazu ist in der Klasse MyUnitTestSystem.cs im Projekt Lighthouse.Silverlight.Core folgende Zeile hinzuzufügen:

Und noch eine Fehlerquelle gilt es auszuschließen: Lighthouse verwendet intern auch einen Browser zum Starten des Silverlightkontextes auch wenn dies nicht sichtbar ist. Sollte Lighthouse im CI verwendet werden, so muss auch auf dem CI-Server ein Browser samt Silverlight Runtime installiert sein.

Und: Lighthouse generiert (unabhängig vom verwendeten Testframework) NUnit-Testreports. Diese lassen sich sehr einfach u.a. im Hudson/Jenkins darstellen, wie man sieht:

Das ganze lässt sich dann noch schön in einen Maven Build Prozess einbetten, aber das wird ein anderer Post.

Die hier vorgestellte Lösung löst meiner Meinung nach das Problem, vernünftig Unittests mit NUnit für Silverlight zu schreiben, welches Stefan Lieser in seinem Artikel Automatisiertes Testen und Silverlight beschrieben hat. Auch die Einbindung in Resharper funktioniert auf Anhieb.

Advertisements
Kommentare
  1. Diskutant sagt:

    Ich habe die Anleitung befolgt, versuche ich nun einen Test mittels Resharper zu starten bekomme ich den Fehler, dass er System.Windows oder eine Abhängigkeit davon nicht finden kann.
    Eine Idee was das sein könnte?

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s