Gibt es einen einfachen Weg in xunit.net für den Vergleich von zwei Sammlungen, ohne auf die Elemente' um?
In einem meiner tests, die ich will, um sicherzustellen, dass eine Sammlung hat bestimmte Elemente. Deshalb will ich den Vergleich dieser Erhebung mit den Elementen einer erwarteten Sammlung nicht in Bezug auf die Reihenfolge der Elemente. Derzeit ist mein test-code sieht etwas so:
[Fact]
public void SomeTest()
{
//Do something in Arrange and Act phase to obtain a collection
List<int> actual = ...
//Now the important stuff in the Assert phase
var expected = new List<int> { 42, 87, 30 };
Assert.Equal(expected.Count, actual.Count);
foreach (var item in actual)
Assert.True(expected.Contains(item));
}
Gibt es eine einfachere Möglichkeit, um dieses Ziel zu erreichen xunit.net? Ich kann nicht mit Assert.Equal
wie diese Methode überprüft, ob die Reihenfolge der Elemente ist die gleiche in beiden Sammlungen. Ich hatte einen Blick auf Assert.Collection
aber nicht entfernen Sie die Assert.Equal(expected.Count, actual.Count)
- Anweisung im code oben.
Dank für Eure Antworten im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brad Wilson von xunit.net erzählte mir in diesem Github Issue, dass man mit LINQ ist
OrderBy
Betreiber und danachAssert.Equal
um zu überprüfen, dass die beiden Sammlungen enthalten die gleichen Elemente, die ohne Bezug auf Ihre Bestellung. Natürlich, Sie haben eine Eigenschaft, die auf das entsprechende Element-Klasse, die Sie verwenden können, für die Bestellung in den ersten Platz (was ich nicht wirklich in meinem Fall).Persönlich, ich löste dieses problem, indem FluentAssertions, eine Bibliothek, die eine Menge von assertion-Methoden, die angewendet werden kann, in einen flüssigen Stil. Natürlich es gibt auch eine Menge von Methoden, die Sie verwenden können, um zu überprüfen Sammlungen.
Im Kontext meiner Frage, ich würde so etwas wie den folgenden code:
Diesem test geht, denn die
BeEquivalentTo
Anruf ignoriert die Reihenfolge der Elemente.Shouldly ist auch eine gute alternative, wenn Sie nicht wollen, zu gehen mit FluentAssertions.
Nicht ein Xunit, aber eine Linq Antwort :
So, in XUnit :
Als @robi-y sagte, in
Microsoft.VisualStudio.QualityTools.UnitTestFramework
es ist CollectionAssert.AreEquivalentVielleicht ein anderer Weg ist:
Bedeutet dies prüft die Bestellung zu. Dies ist, was passiert intern:
Also, wenn Sie kümmern sich nicht um die Bestellung, bestellen Sie einfach beide Listen vor:
IComparable<T>
). SoSequenceEqual
ist keine option, da es überprüft die Reihenfolge der Elemente.Können Sie
CollectionAssert.AreEquivalent
aus Microsoft