2016-04-07 10 views
7

Ich schreibe gerade einige Komponententests, um NUnit 3 anstelle von NUnit 2 zu verwenden, und muss einige Behauptungen in Contraint-basierte Behauptungen ändern. Ich habe folgendes behauptet:Lesbarkeit erhöhen, um IsNotNullOrEmpty mit Constraint-basierten Asserts zu bestätigen

Assert.IsNullOrEmpty(result); 

Dass ich geändert habe:

Assert.That(result, Is.Null.Or.Empty); 

Aber ich bin nicht ganz zufrieden mit der Lesbarkeit bei IsNotNullOrEmpty behaupten:

Assert.That(result, Is.Not.Null.And.Not.Empty); 

Meine Der aktuelle Vorschlag besteht darin, die folgende statische Klasse zu erstellen:

public static class Text 
{ 
    public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty; 

    public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty; 
} 
Verwendung

:

Assert.That(result, Text.IsNotNullOrEmpty); 

Diese bessere Lesbarkeit auf Kosten bietet, eine benutzerdefinierte Einschränkung einzuführen. Gibt es eine Standardmethode, um die gleiche Aussage zu machen, oder sollte ich stattdessen Is.Not.Null.And.Not.Empty verwenden?

+0

Diese Frage kann objektiv beantwortet werden. Bearbeitete den Körper, um die Frage in nicht-subjektiven Begriffen neu zu formulieren; Wählen, um wieder zu öffnen. – dasblinkenlight

Antwort

7

Ihre Behauptung für Is.Null.Or.Empty liest sich einwandfrei ohne eine Test Klasse. Wenn diese Behauptung fehlschlägt, wissen Sie genau, was passiert ist: Sie haben ein gültiges string Objekt, das nicht leer ist.

Die Fragen, die ich mit „DeMorgans-ized“ Version seiner Negation sehen, das heißt Is.Not.Null.And.Not.Empty, sind, dass es zu lange dauert, und es liest nicht annähernd so schön wie Is.Null.Or.Empty tut.

Anstatt jedoch eine separate Einschränkung für sie zu machen, würde ich seine Teile getrennt behaupten, dh

Assert.That(result, Is.Not.Null); 
Assert.That(result, Is.Not.Empty); 

Der Grund, warum ich es tun würde, wie das ist, dass die beiden Fehlerbedingungen nicht überlappen, dh result könnte sein null, oder es könnte leer sein, aber es kann nicht beides gleichzeitig sein. Eine einzelne zusammengesetzte Behauptung unterscheidet nicht zwischen diesen zwei Situationen, so dass Sie am Ende für einen Debugger gehen, um zu sehen, ob resultnull oder leer war.

Separate Behauptungen hingegen sagen Ihnen genau, was passiert, während Sie gut lesbar bleiben. Sie "kosten" Ihnen eine zusätzliche Zeile pro Behauptung; Ich denke, das ist ein vernünftiger Preis, um genauere Informationen über potenzielle Fehler zu erhalten.

Verwandte Themen