2014-04-01 9 views
12

Was ist die idiomatische Art mit NUnit 2.6 zu behaupten, dass zwei Sammlungen unabhängig von den Werten ihrer Elemente gleich lang sind?Die meisten idiomatischen Weg in NUnit, um gleiche Länge auf Sammlungen geltend zu machen

Ich kann mehrere Möglichkeiten sehen, diese Behauptung auszudrücken. Welches ist bevorzugt, oder gibt es Nachteile/Vorteile bei der Verwendung des einen oder anderen?

Assert.That(coll1, Has.Count.EqualTo(coll2.Count)); 
Assert.That(coll1.Count, Is.EqualTo(coll2.Count)); 
Assert.AreEqual(coll1.Count, coll2.Count); 

Ich kann sehen, dass die erste Option einen schönen Ausgang im Falle stellt die Behauptung fehlgeschlagen (erwartete Anzahl von ... aber tatsächlich bekam ...), während die anderen beiden Optionen nur dann ausgegeben, „Erwartete ... , actual ... ", wenn ich keine benutzerdefinierte Nachricht über einen zusätzlichen Parameter zur Verfügung stelle.

Antwort

1

Ich denke, es ist persönliche Präferenz wirklich ist, aber für gehe ich für:

Assert.That(coll1.Count(), Is.EqualTo(coll2.Count())); 

Linq verwenden und wenn die zugrunde liegende Sammlung/Enumerable Art es immer noch in den meisten Fällen geändert würde funktionieren, können Sie den Typ nicht nur testen die Zählung . Dies funktioniert auch für Dinge, die .Count auf ihnen wie IDBSet zum Beispiel nicht haben. Aber ich sehe auch nichts falsches mit .AreEqual entweder. Wenn der nächste Ingenieur versteht, dann ist es ein Gewinner, wie?

18

Ich ziehe:

Assert.That(collection, Has.Count.EqualTo(expectedCount)); 

Ganz einfach, weil .Count und Count() könnten falsch überschrieben werden (die in einem anderen Unit-Test getestet werden sollen, wenn sie sind, obwohl ich weiß nicht, wie nunit tatsächlich die Zählung tut im Inneren). Grundsätzlich möchte ich nicht, dass meine tatsächlichen Seitenlogik hat.

// Arrange 
var expectedCount = 8; 

// Act 
var list = GetList(); 
var actualCount = list.Count(); 

// Assert 
Assert.That(actualCount, Is.EqualTo(expectedCount)); 

Beide lesen ziemlich die gleiche, aber die erste hat weniger Logik zu überblicken, wenn es fehlschlägt: Aufruf Count oder Count() sollte wohl in der Tat wie geschehen.

Verwandte Themen