Mit ‘Unittest’ getaggte Beiträge

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.