Der Titel ist unmißverständlich: NUnit, der Godfather der Test-Frameworks für .NET, wird heute von mir in der Reihe “Meta-Test, 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 für Testing der professionellen Entwicklergemeinde zur Verfügung gestellt hat, hört man unter Gleichgesinnten und Kollegen fast immer die gleiche Story: “Tests? Unit Tests? Klar! NUnit!”

Der Pate unter den Test-Frameworks

So ist es auch nicht weiter erstaunlich, dass man nahezu überall, wo das Wörtchen “Test” fällt, auch “NUnit” zu sehen bekommt. Sei es nun bei den Codeassistenten, bei Build- oder CI-Tools, Addins und sogar weiteren Test-Frameworks. Die Verbreitung und Unterstützung von NUnit ist hier einfach nicht zu toppen. Aber auch die vielen Kontakte und Beziehungen des “Paten der Test-Frameworks” helfen nicht viel beim Meta-Test mit dem FizzBuzz-Kata! Auf geht’s!

Der Code

FizzBuzz ist mit NUnit und den “Standard-TDD-Regeln” schnell implementiert. Referenz hinzufügen, Testklasse inklusive Testmethode aufbauen, noch schnell ein using NUnit.Framework; und die beiden Attribute [TestFixture] (für Klassen) sowie [Test] hinzugefügt – und schon kann man fröhlich testen!
nunit_guirunner
Wer jetzt einen Codeassistenten wie Resharper oder Coderush hat, ist praktisch nur ein Klick bzw. Tastenschlag von der Testausführung entfernt. Doch auch ohne “Code-Beschleuniger” gehen NUnit-Tests elegant, z.B. mit dem TestDriven.NET Addin. Mal von diesen “Integrationstüren” abgesehen, bietet NUnit auch eigenständige Runner für die Konsole sowie auch als Windows-Anwendung an. Passt!

using NUnit.Framework;

namespace KataFizzBuzzNUnit
{
    [TestFixture]
    public class FizzBuzzTest
    {
        private FizzBuzz target = new FizzBuzz();

        [Test]
        public void Multiples_Of_Three_Returns_Fizz()
        {
            Assert.That(target.Translate(6), Is.EqualTo("Fizz"));
        }

        [Test]
        public void Multiples_Of_Five_Returns_Buzz()
        {
            Assert.That(target.Translate(10), Is.EqualTo("Buzz"));
        }

        [Test]
        public void Multiples_Of_Three_And_Five_Returns_FizzBuzz()
        {
            Assert.That(target.Translate(15), Is.EqualTo("FizzBuzz"));
        }

        [Test]
        public void No_Multiples_Of_Three_Or_Five_Returns_Number()
        {
            Assert.That(target.Translate(7), Is.EqualTo("7"));
        }
    }
}

Bei der Implementierung fühlt man sich schon fast wie bei MS-Test, jedoch mit einem ganz gewaltigen Unterschied: Die Assert-Klasse im Allgemeinen sowie die Assert.That() Syntax von NUnit sind mächtig – und mächtig hilfreich. Das mit NUnit 2.4 eingeführte Constraint Model ist nicht nur besser lesbar, sondern auch intuitiver. Kennt man mal die wichtigsten Constraints, vergisst man sie auch nicht mehr so schnell. Alles in Allem ist TDD mit NUnit eine runde Sache. In weniger als 5 Minuten strahlten meine 4 Tests und ich uns gegenseitig an.

Bewertung

Hmm, es fällt mir schon schwer, etwas “negatives” an NUnit zu finden. Es mag den einen oder anderen stören, wie die Test-Projekt-Struktur von NUnit aufgebaut ist. Auch der GUI-Runner ist jetzt nicht der Augenschmaus schlechthin. Doch die Kernkompetenzen werden von NUnit bravourös gemeistert.

NUnit – Die Referenz

Als kleines Fazit kann ich für mich schon mal sagen – NUnit hat die Messlatte ganz schön hochgelegt. Effektiv betrachtet ist NUnit als Test-Framework derzeit die Referenz, mit der sich alle anderen messen lassen müssen. Das ist auch gut so, denn NUnit ist durch die jahrelange, stetige Entwicklung viele Schritte gegangen – manchmal auch einige Schritte voraus. Bleibt die Frage offen: Gibt es noch bessere Test-Frameworks für C# und .NET als NUnit? Abwarten, meine Test-Serie geht in Kürze weiter. Stay tuned!

Comments
This article has one comment:

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>

  • [...] NUnit –...
    by .NET Stories: Digitale Erfahrungen » Blog Archive » Meta-Test: TDD & BDD Test-Frameworks im Vergleich
    on April 22nd 2010

    [...] NUnit – All-Time-Hall-Of-Fame-Most-Valueable-Tester [...]


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

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