2009-11-24 2 views
11

Einige der NUnit ‚s Assert Methoden sind überlastet ICollection zu verwenden, aber nicht ICollection<T> und daher kann man sie nicht benutzen.Warum oder wie man verwendet NUnit Methoden mit ICollection <T>

Gibt es das überhaupt? Verdammt, mache ich etwas Dummes?

Ich muss zurück zu verwenden Assert.AreEqual anstelle von spezialisierten Methoden und es macht meine Tests hässlich.

Irgendwelche Ratschläge?

Edit:

Danke für die Antworten. Die That Methode von NUnit scheint interessant, also werde ich zu einem späteren Zeitpunkt nachsehen.

Mark korrekt erwähnt, aber NUnit Collection Asserts sind ausgezeichnet. Ich habe sie vor kurzem bei einigen neuen Tests verwendet und fand heraus, dass sie hervorragend funktionieren.

+0

Ich sollte erwähnen, in meiner Klasse teste ich. Das Zurückstellen des Methodenrückgabetyps auf die Liste anstelle von IList löst dieses Problem, aber im Gegenzug stelle ich die Liste aus, die ich aus Gründen, die ausführlich auf SO usw. diskutiert werden, nicht möchte. – Finglas

+0

Es sollte nicht schaden, linq zu verwenden, um Ihre Sammlung in eine Liste zu verwandeln, solange Sie nichts behaupten, was nicht in der Sammlung vorhanden ist. Die Behauptung, dass die ForEach-Methode zum Beispiel funktioniert, wäre eine schlechte Form. –

Antwort

8

ICollection und ICollection<T> sind unterschiedliche Verträge - das eine erbt das andere nicht.

http://msdn.microsoft.com/en-us/library/system.collections.icollection_members.aspx http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx

Wenn Sie eine generische Sammlung haben Sie ToList() auf sie anrufen und eine List<T> erhalten, die die nicht-generische ICollection auch umzusetzen geschieht. Verwenden Sie dann diese Liste in der NUnit Assert-Methode.

+0

Zerschlagen. Linq rettete den Tag (noch einmal). Prost, habe nicht daran gedacht. – Finglas

+1

Linq könnte nicht den Tag retten, nur geben Sie eine Rose getönten Erinnerung, die später zu Enttäuschung führen wird. –

+0

Nun, es gab mir ToList(), ich bin glücklich. – Finglas

7

Es gibt eine Reihe von CollectionAsserts, oder Sie können Ihren Test von AssertHelper erben und Syntax wie

Expect(actual, Is.EquivalentTo(expected)); 

Ein Blick auf die Dokumentation sollten Sie die Syntax für die Einschränkungen geben, die Sammlungen gelten.

Hier ist ein link (dies ist die Version 2.5.2)

N. B. Erwarten Sie ist nur eine Abkürzung für Assert.That ...

+0

Ihre Antwort ist besser als die angenommene, wie schade. Nur 3 Minuten zu spät. –

9

Ich weiß nicht, ob dies ist, was Sie suchen, aber für generische Sammlungen statt mit:

Assert.Contains(member, list); 

Ich benutze:

Assert.That(list.Contains(member)); 

die ich fast als lesbar finde.

Verwandte Themen