Ich würde gerne "Fluent Assertions Collections Assertions" und "Property Assertions" kombinieren, z. behaupte, dass zwei IEnumerable
paarweise gleich sind, indem sie einen Eigenschafts-nach-Eigenschaft-Vergleich (möglicherweise "verschachtelt") verwenden (d. h. strukturelle Gleichheit, im Sprachgebrauch der funktionalen Sprache).
Konkretes Beispiel:
%Vor% Hier habe ich eine Erweiterungsmethode ToSelectListItems
geschrieben, die ein Dictionary
in ein IEnumerable
von SelectListItem
s (aus ASP.NET MVC) konvertiert. Ich möchte feststellen, dass actual
und expected
"strukturell" gleich sind, wobei zu beachten ist, dass der Referenztyp SelectListItem
Equal
s nicht überschreibt und daher standardmäßig die Referenzgleichheit verwendet.
Aktualisieren
Zurzeit verwenden wir die folgende handgerollte Lösung und hoffen immer noch auf etwas Besseres in FluentAssertions:
%Vor% (Hinweis: Zip
hier ist meine eigene IEnumerable
Erweiterung, die Tuple.Create
als Standardprojektion verwendet)
Update 2
Hier sind zwei minimale Beispiele:
%Vor%Ich habe Unterstützung für Ihr Szenario im Hauptteil von Fluent Assertions hinzugefügt. Es wird Teil der nächsten Version sein, aber es könnte ein oder zwei Monate dauern, um genug Änderungen zu akkumulieren, um eine weitere Veröffentlichung zu rechtfertigen. Wenn Sie möchten, können Sie den Quell-Build abrufen und die release.bat ausführen, um eine Zwischenversion zu erstellen.
Wenn ich Ihre Frage richtig interpretiere, sollten Sie versuchen, Version 1.7.0 von Fluent Assertions. In dieser Version haben wir das Verhalten geändert, das bei der Verwendung von IncludingNestedObjects auch bei Auflistungen von Objekten verwendet wird. Ein Auszug aus der Dokumentation.
"Zusätzlich können Sie den Strukturvergleich um eine Ebene erweitern, indem Sie die IncludingNestedObjects-Eigenschaft einfügen. Dadurch wird der Vergleich angewiesen, alle (Sammlungen von) komplexen Typen zu vergleichen, auf die sich die Eigenschaften des Objekts (in diesem Beispiel) beziehen Es wird angegeben, dass die geschachtelten Eigenschaften des Objekts mit den verschachtelten Eigenschaften des erwarteten Objekts übereinstimmen.Wenn Sie jedoch SharedProperties angeben, vergleicht es nur die gleichnamigen Eigenschaften zwischen den verschachtelten Objekten. Beispiel:
dto.ShouldHave().SharedProperties().IncludingNestedObjects.EqualTo(customer);
"
Tags und Links c# unit-testing nunit fluent-assertions