Frage

Ich bin neu in TDD und xUnit so möchte ich meine Methode testen, dass etwas wie folgt aussieht:

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

Gibt es eine Assert Methode, die ich verwenden kann? Ich denke, so etwas wie dieses 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 wie das?

War es hilfreich?

Lösung

xUnit.Net erkennt Sammlungen, so dass Sie nur tun müssen,

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

Sie können weitere Sammlung Behauptungen in CollectionAsserts.cs

NUnit Bibliothekssammlung Vergleichsmethoden sind

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

und

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

Weitere Informationen finden Sie hier: CollectionAssert

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

Andere Tipps

In der aktuellen Version von XUnit (1.5) kann man einfach nutzen

  

Assert.Equal (erwartet, tatsächlich);

Das obige Verfahren wird durch das Element Vergleich der beiden Listen ein Element tun. Ich bin mir nicht sicher, ob dies für eine vorherige Version funktioniert.

Mit xUnit, sollten Sie Kirsche wollen wählen Eigenschaften jedes Element, das Sie Assert.Collection verwenden, um zu testen.

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 überprüft wird.

Vor kurzem war ich mit xUnit 2.4.0 und Moq 4.10.1 Paketen in meinen asp.net Kern 2.2 App.

In meinem Fall habe ich es geschafft, es mit zwei Schritten Prozess zu bekommen arbeiten:

  1. Definieren einer Implementierung von IEqualityComparer<T>
  2. Pass die comparer weise als dritter Parameter in Assert.True Methode:

    Assert.True(expected, actual, new MyEqualityComparer());

Aber es ist ein weiterer schöner Weg, um das gleiche Ergebnis erhalten unter Verwendung von FluentAssertions Paket. Es ermöglicht Ihnen Folgendes zu tun:

// Assert          
expected.Should().BeEquivalentTo(actual));

Interessanter immer, dass Assert.Equal() versagt, auch wenn ich die Elemente von zwei Listen bestellt sie in der gleichen Reihenfolge zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top