2009-01-07 7 views
50

Hallo, ich bin neu in TDD und xUnit so möchte ich meine Methode testen, die etwas ähnliches:xUnit: Assert zwei Liste <T> sind gleich?

List<T> DeleteElements<T>(this List<T> a, List<T> b); 

natürlich nicht die wirkliche Methode ist :) Gibt es eine Assert Methode, die ich verwenden kann? Ich denke, etwas wie das wäre schön

List<int> values = new List<int>() { 1, 2, 3 }; 
    List<int> expected = new List<int>() { 1 }; 
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 }); 

    Assert.Exact(expected, actual); 

Gibt es so etwas?

Antwort

59

xUnit.Net erkennt Sammlungen, so dass Sie nur

Assert.Equal(expected, actual); // Order is important 

tun müssen, können Sie weitere Sammlung Behauptungen in CollectionAsserts.cs

Für NUnit Bibliothekssammlung Vergleichsmethoden

sind sehen
CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters 

und

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter 

Weitere Details hier: CollectionAssert

MbUnit hat auch Sammlung Behauptungen ähnlich wie NUnit: Assert.Collections.cs

+1

Quellcode-Link für http://xunit.codeplex.com/SourceControl/changeset/view/d947e347c5c3#Samples%2fAssertExamples%2fCollectionExample.cs geändert –

+1

Neuer Link in Kommentaren auch gebrochen. –

+1

Das Projekt wird jetzt nach GitHub verschoben, aber ich konnte auch dort die bestimmte Quelldatei nicht finden. – MEMark

27

In der aktuellen Version von XUnit (1.5) Sie können nur

verwenden

Assert.Equal (erwartet, aktuell);

Die obige Methode führt einen elementweisen Vergleich der beiden Listen durch. Ich bin mir nicht sicher, ob dies für eine frühere Version funktioniert.

+4

Das Problem mit Assert.Equal für Sammlungen ist, dass es fehlschlägt, wenn die Elemente der Sammlungen in unterschiedlichen Ordnungen sind, auch wenn die Elemente in beiden vorhanden sind. –

+1

@ ScottA.Lawrence Listen haben auch Ordnung! Bekommen Sie das gleiche Verhalten mit HashSets? – johv

+0

@johv Ich habe es nicht mit HashSets getestet, aber das ist eine gute Idee. Sobald ich eine Chance hatte, es zu versuchen, werde ich versuchen, mich daran zu erinnern, hier zu antworten. –

6

Wenn Sie mit xUnit die Eigenschaften jedes zu testenden Elements auswählen möchten, können Sie Assert.Collection verwenden.

Assert.Collection(elements, 
    elem1 => Assert.Equal(expect1, elem1.SomeProperty), 
    elem2 => { 
    Assert.Equal(expect2, elem2.SomeProperty); 
    Assert.True(elem2.TrueProperty); 
    }); 

Dies testet die erwartete Anzahl und stellt sicher, dass jede Aktion verifiziert wird.