Mit Visual Studio 2012 wurde das Unit Test Framework in Visual Studio neu überarbeitet. Vor allem die Möglichkeit der Einbindung verschiedener Unit Testframeworks, wie z.B. NUnit,,XUnit oder native C++ Unit Tests, sind klare Vorteile gegenüber VS 2010. Der Unit Test Explorer wurde ebenso neu Entwickelt, wobei hier die Community mit Recht die Möglichkeit vermisst hat, Unit Tests im Explorer nach Eigenschaften ähnlich der Testlisten in VS 2010 Gruppieren zu können. Mit dem Visual Studio Update 1 sind jetzt neue Funktionen dazu gekommen, um Unit Tests nach Project also Test Projekten in der Solution und Traits zu gruppieren.

image 

Die Gruppierung nach Project ist ja quasi selbst erklärend, so dass ich auf die Möglichkeiten mit Traits eingehen möchte. Als erstes Beispiel sollen Test Kategorien definierten werden. Hierzu wird der Test Methode des Unit Tests das Attribut TestCategory hinzugefügt.  In diesem Fall mit dem Wert “Integration”:

image

Gruppiert man nun im Unit Test Explorer nach Traits, werden die Unit Tests entsprechend der definierten TestCategories gruppiert im Test Explorer dargestellt. Werden neue TestCategories im Code definiert, werden diese Änderungen beim nächsten Build automatisch erkannt und ergänzt.

image

Hierbei gilt zu beachten, dass ein Unit Test, für welchen mehrere TestCategories definiert wurden, auch unter jeder definierten Kategorie im Unit Test Explorer dargestellt wird. Dies ist bewusst so implementiert, da man z.B. eine Kategorie “Spezial” definieren könnte, um so nur ganz bestimmte Tests auszuführen, welche aber auch gleichzeitig z.B. in einer Funktionalen Kategorie enthalten sein sollen:

image

Die selektive Ausführung ist dann möglich, indem man den Trait selektiert und Run Selected Tests wählt, dies gilt auch wenn man nach anderen Kriterien, wie z.B. Duration oder Project gruppiert.

image

Der Unit Test Explorer verfügt über eine Filter Option um die angezeigten Unit Test einzugrenzen. Dies ist besonders hilfreich, wenn man sehr viele Unit Tests hat, aber nur einen Teil ausführen möchte. Ein “Run All” führt dann nur die durch den Filter definierten Tests aus. Für Traits kann man auch einen Filter definieren, der z.B. nur eine bestimmte Kategorie, hier “Integration” selektieren soll.

image

Stellt man ein “-“ vor den Filter, kann man auch eine bestimmte Kategorie ausblenden. In diesem Fall die “Reader Tests” und “Integration”. Die Definition mehrerer Filter ist wie ein logisches AND der einzelnen Ausdrücke zu verstehen.

image

Weitere Informationen zur Anwendung von Filtern gibt’s hier.

Außer der TestCategory gibt es auch noch andere Attribute wie Owner, Priority und TestProperties, welche optional definiert werden können.
TestProperties
sind frei definierbare Wertepaare und ermöglichen somit flexibel Traits zu definieren. Hier ein Beispiel:

image

image

Hinweis: Häufig besteht die Anforderung nur die [TestClass] mit Attributen zu versehen, so dass alle [TestMethoden] diese erben. Für MSTest fehlt leider aktuell diese Möglichkeit. Einzig der XUnit Test Adapter erlaubt die Dekoration der TestClass und vererbt diese in der aktuellen Version. Die Unterstützung ist also Abhängig vom Test Adapter. In folgenden Post finden sich weitere Beispiele für Traits mit anderen Unit Test Frameworks wie NUnit, XUnit, MBUnit und nativem C++ und welche Funktionalität mit welchem Adapter zur Verfügung steht.

Happy Testing

Über den Autor

ChrisChristian Binder arbeitet als ALM Architect in der Developer Platform & Strategy Group bei Microsoft Deutschland. Er arbeitet seit 1999 bei Microsoft u.a. als Escalation Engineer dann Platform Strategy Manager und kann so auf umfangreiche Erfahrungen im Bereich Application Development zurückgreifen. Auch war er im Product Development von Microsoft in Redmond tätig, was ihn 2005 zum Thema Application Lifcycle Management gebracht hat.