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!

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
- Dauer
Zackig, Knackig, ohne Trärä und Tamtam. FizzBuzz-Regeln in 5 Minuten. Mit Codebeschleuniger geht’s sogar noch schneller. Passt. - Größe
Ähnlich wie bei MS-Test. Eine kompakte Testklasse mit 4 Testmethoden. - Tooling
MS-Test war schon sehr gut – doch NUnit ist sogar noch besser! Die Verbreitung in der OSS-Gemeinde macht sich hier bemerkbar. Top. - Usability
Sehr gut. Assert’s schön mit Constraints. Wenn man möchte sogar noch beschleunigt über das Erben von AssertionHelper. Angenehm. - Support
Unmengen an Material im Internet. Open-Source, stabil, große Gemeinde, aktive Entwicklung. Zufrieden.
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!
by.NET Stories: Digitale Erfahrungen » Blog Archive » Meta-Test: TDD & BDD Test-Frameworks im VergleichonApril 22nd 2010[...] NUnit – All-Time-Hall-Of-Fame-Most-Valueable-Tester [...]