NUnit Cheatsheet
Frei nach "Ey Mann, wo ist mein Auto?" kann man sagen, dass NUnit ein sehr großes und mächtiges Unittest Framework ist. Und seine Größe wird nur durch seine Mächtigkeit übertroffen.
NUnit ist aber auch sehr gut darin seine Größe und Mächtigkeit zu verbergen. Wenn ich mir die Unittests in meiner Firma gelegentlich so anschaue, dann könnte man meinen NUnit hätte nur die Assert.AreEqual(...) Methode. Eigentlich alle Tests werden über diese Methode realisiert.
Man könnte jetzt doch sagen "Hey, ist doch super. Mann muss sich nur diese eine Methode merken und kann Unittests schreiben".
Aus Erfahrung habe ich damit aber zwei Probleme:
NUnit ist aber auch sehr gut darin seine Größe und Mächtigkeit zu verbergen. Wenn ich mir die Unittests in meiner Firma gelegentlich so anschaue, dann könnte man meinen NUnit hätte nur die Assert.AreEqual(...) Methode. Eigentlich alle Tests werden über diese Methode realisiert.
Man könnte jetzt doch sagen "Hey, ist doch super. Mann muss sich nur diese eine Methode merken und kann Unittests schreiben".
Aus Erfahrung habe ich damit aber zwei Probleme:
- Man schreibt keine Unittests, da man die Bedingung nicht oder nur umständlich mit einer Prüfung auf Gleichheit "erschlagen" kann.
- Unittests werden groß und kryptisch wenn man versucht alles mit Assert.AreEuqal(...) zu machen.
Hier passt ein Zitat von Paul Watzlawick ziemlich gut:
"Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel."
Und damit man nicht immer mit dem AreEqual-Hammer arbeitet habe ich hier jetzt mal einen kleinen Spickzettel für NUnit zusammen geschrieben.
Prinzipiell hat NUnit zwei API Modelle. Da ist zum einen das bekannte "Classic Model" mit den Assert.Are... Methoden. Zum anderen das "Constraint Model" das mit sogenannten Constraints (deutsch Bedingungen) arbeitet.
Ich werde hier nur das "Constraint Model" zeigen, da dies meiner Meinung nach besser lesbar und mächtiger ist.
Cheatsheet
Cheatsheet
// Vergleich von 2 Objekten
Assert.That("lorem ipsum", Is.EqualTo("lorem ipsum"));
// Vergleich von 2 Zahlen mit absoluter Toleranz
Assert.That(3.14, Is.EqualTo(Math.PI).Within(0.01));
// Vergleich von 2 Zahlen mit relativer Toleranz
Assert.That(3.14, Is.EqualTo(Math.PI).Within(1).Percent);
// Vergleich auf identische Referenz
object o = new object();
object o2 = o;
Assert.That(o, Is.SameAs(o2));
// Vergleich auf Null
object x = null;
Assert.That(x, Is.Null);
// Vergleich auf nicht Null
Assert.That(o, Is.Not.Null);
// Zahl größer als
Assert.That(23, Is.GreaterThan(10));
// Zahl kleiner als
Assert.That(23, Is.LessThan(100));
// Innerhalb eines Bereichs
Assert.That(42, Is.InRange(1, 100));
// ******************************************************
// Strings
// ******************************************************
// Auf konkreten Type Prüfen
Assert.That("lorem", Is.TypeOf());
// Auf substring prüfen
Assert.That("lorem", Contains.Substring("ore"));
// Nicht case sensitiv auf Substring prüfen
Assert.That("lorem", Is.StringContaining("ORE").IgnoreCase);
// Text mit einem regulären Ausdrück überprüfen
Assert.That("lorem ipsum", Is.StringMatching("^lorem\\s"));
// ******************************************************
// Collections
// ******************************************************
string[] values = new string[] { "lorem", "ipsum", "dolor", "sit" };
// Enhält
Assert.That(values, Has.Member("dolor"));
Assert.That(values, Has.Some.EqualTo("dolor"));
// Enhält nicht
Assert.That(values, Has.No.Member("amet"));
Kommentare
Kommentar veröffentlichen