In meiner kleinen Blog-Serie über den Vergleich von Test-Frameworks für .NET / C# macht der “Platzhirsch”, das On Board Visual Studio Test-Framework MS-Test den Anfang. Genau zur richtigen Zeit des Launches von Visual Studio 2010 wird hier das dazugeörige Test-Framework unter die Lupe genommen. MS-Test ist seit VS2005 integrierter Bestandteil der professionellen Versionen von Visual Studio – womit der erste Nachteil schon zwischen den Zeilen hindurchschimmert. Leider ist MS-Test bis zum heutigen Tag nicht in den Visual Studio Express-Versionen verankert – also quasi nicht “frei verfügbar”. Wieso das so ist, ist mir immer noch ein Rätsel.
Los geht’s mit Projekten
Aber zurück zur Sache. Es muss ja schließlich das mittlerweile mehr als bekannte FizzBuzz-Kata als Fingerübung implementiert werden.

Da tut sich schon interessantes am Anfang auf: Durch die nahtlose Integration in Visual Studio fügt man keine Referenz auf irgendeine Framework-DLL hinzu, sondern startet die Tests mit der Erstellung eines Testprojektes. Für mich persönlich ein wenig gewöhnungsbedürftig – ich schreibe man Tests und Code für gewöhnlich in der selben Assembly und lagere es nur auf ausdrücklichen Wunsch aus.
Nach Abschluß der durch den (eigentlich um die Arbeit zu beschleunigen konzipierten) Projekt-Wizard durchgeführten Vorbereitungen und der manuellen Abschlussvorbereitungen kann es nun endlich losgehen.
Straight-Forward mit Attributen und Asserts
Die Test-Methoden gehen schnell von der Hand, man braucht nur das [TestMethod] Attribut hinzufügen. Die Assert-Klasse deckt alle notwendigen Prüfungen ab, bietet aber im Vergleich zu anderen Frameworks wie z.B. NUnit wesentlich weniger “methodische Expressivität”. In unserem Fall brauchen wir nur die AreEqual-Methode. Schon nach dem ersten Test fällt allerdings die lange Testdauer des Testrunners ein wenig negativ auf. Das kann auch wesentlich schneller gehen.
Das Test-Ergebnis sieht relativ unspektakulär aus:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace FizzBuzzMSTest
{
[TestClass]
public class FizzBuzzTest
{
[TestMethod]
public void Multiples_Of_Three_Returns_Fizz()
{
FizzBuzz target = new FizzBuzz();
string translation = target.Translate(6);
Assert.AreEqual("Fizz", translation);
}
[TestMethod]
public void Multiples_Of_Five_Returns_Buzz()
{
FizzBuzz target = new FizzBuzz();
string translation = target.Translate(10);
Assert.AreEqual("Buzz", translation);
}
[TestMethod]
public void Multiples_Of_Three_And_Five_Returns_FizzBuzz()
{
FizzBuzz target = new FizzBuzz();
string translation = target.Translate(15);
Assert.AreEqual("FizzBuzz", translation);
}
[TestMethod]
public void No_Multiples_Of_Three_Or_Five_Returns_Number()
{
FizzBuzz target = new FizzBuzz();
string translation = target.Translate(7);
Assert.AreEqual("7", translation);
}
}
}
Bewertung
- Dauer
Die FizzBuzz-Implementierung ging relativ zügig von der Hand. Ich habe ca. 15 Minuten gebraucht. Der “lahme” Testrunner hat mich etwas gestört. Die meiste Zeit ging für das Projekt, die Referenzverweise und das hin und her zwischen den Projekten drauf. - Größe
Die Testgröße ist überschaubar. Eine kompakte Testklasse mit 4 Testmethoden. Eine klassische Class-Per-Class Struktur. Das Testprojekt ist isoliert vom Code. - Tooling
Ein regelrechtes Heimspiel mit der VS-Integration. Auch Code-Assistenten wie Resharper oder Coderush kennen den MSTest. Alles in Allem eine sehr gute Unterstützung. - Usability
Durch den Projekt-Wizard und die entsprechende Dokumentation komfortabel für allgemeines Testing. Speziell für TDD/BDD allerdings etwas hakelig. Immer gleich die Test/Code-Separation. Die Asserts sind sicherlich ausreichend. - Support
Was soll man hier schreiben, außer MS? Das Framework wird direkt von Microsoft mit Visual Studio ausgeliefert. Die Dokumentation ist gut, Online-Material ist sicherlich vorhanden. MSTest ist in der Community (vor allem für Open Source oder kleinere Projekte) nicht so weit verbreitet wie andere Frameworks.
MS-Test ist ein solides Framework, mit dem sich sicherlich auch gut TDD betreiben lässt. Man merkt dem Featureset an, dass es nicht nur für Unit-Testing ausgelegt ist. Der integrierte Runner ist schick, das Reporting ein Highlight. Ich sollte nicht unerwähnt lassen, dass vor Allem die Kombination TFS/MSTest ein sehr gutes Reporting/Monitoring-Werkzeug darstellt.
Zu den Tests selbst gibt das Framework wenig Hilfestellung bzw. Guidance zur Strukturierung und Anwendung der Tests. So wird wohl am meisten die Class-Per-Class Struktur angewendet werden, mit den üblichen TDD Best Practices.
MS-Test leider nur für “Profis”
Ein absolutes Manko ist die nicht-freie Verfügbarkeit des Frameworks und damit auch das Fehlen des Features in der Express-Edition.
Einfach mal Tests/Code schreiben und veröffentlichen ist somit unmöglich. Für bekennende TDDler ein No-Go. Mit den 15 Minuten Fizzbuzz ist die Umsetzungsgeschwindigkeit in Ordnung – wobei ich zugegebenermaßen Fizzbuzz auch schon wesentlich zügiger implementiert habe. Das bringt mich dann auch zum nächsten Test-Framework unter meiner Meta-Test-Lupe… stay tuned!
byFrank HalderonApril 23rd 2010Hi Ilker,
hast Du Dir zusammen mit MS-Test auch mal Pex angesehen?
Ciao,
Frank
by.NET Stories: Digitale Erfahrungen » Blog Archive » Meta-Test: NUnit – All-Time-Hall-Of-Fame-Most-Valuable-TesteronApril 15th 2010[...] Test-Frameworks im Vergleich” ein wenig unter die Lupe genommen. Gestern hatte ich schon den Redmond-Test-Botschafter MS-Test im Visier. Irgendwie ist es schon komisch. Obwohl Microsoft mit MS-Test ein umfangreiches Framework [...]
byGolo RodenonApril 15th 2010Hi Ilker,
cooler Artikel und eine sehr gute Idee, mal einen Vergleich dieser Art zu machen
.
Eine Sache blieb leider unerwähnt – die von Visual Studio erzeugten .vsmdi-Dateien, die leider regelmäßig Probleme verursachen, wenn man im Team entwickelt
.
Die schlechte Handhabbarkeit dieser Dateien ist für mich leider in der Regel ein KO-Kriterium für MSTest.
Viele Grüße,
Golo
byMaxonApril 14th 2010Kurz und knapp – sehr gut!
Bin gespannt auf die weiteren Artikel!
Grüße
Max
by.NET Stories: Digitale Erfahrungen » Blog Archive » Meta-Test: TDD & BDD Test-Frameworks im VergleichonApril 14th 2010[...] MS Test – Visual Studio On Board Test-Framework [...]