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.
mstest_createproject_vs
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

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. mstest_runner_vsEinfach 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!

Comments
This article has 5 comments:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • Hi Ilker, hast Du...
    by Frank Halder
    on April 23rd 2010

    Hi Ilker,

    hast Du Dir zusammen mit MS-Test auch mal Pex angesehen?

    Ciao,
    Frank

  • [...] Test-Frameworks im...
    by .NET Stories: Digitale Erfahrungen » Blog Archive » Meta-Test: NUnit – All-Time-Hall-Of-Fame-Most-Valuable-Tester
    on April 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 [...]

  • Hi Ilker, cooler Artikel...
    by Golo Roden
    on April 15th 2010

    Hi 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

  • Kurz und knapp...
    by Max
    on April 14th 2010

    Kurz und knapp – sehr gut!
    Bin gespannt auf die weiteren Artikel!

    Grüße
    Max

  • [...] MS Test...
    by .NET Stories: Digitale Erfahrungen » Blog Archive » Meta-Test: TDD & BDD Test-Frameworks im Vergleich
    on April 14th 2010

    [...] MS Test – Visual Studio On Board Test-Framework [...]


(c) 2000-2012 ilker.de - Creative Computing.

For any case of inquiry regarding this document, you can always contact the website owner.