Wie kombiniere ich Sammlungs- und Eigenschaftszusicherungen mit fließenden Behauptungen?

8

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%     
Stephen Swensen 25.01.2012, 17:05
quelle

2 Antworten

6

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.

    
Dennis Doomen 16.02.2012, 19:47
quelle
7

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); "

    
Dennis Doomen 26.01.2012 07:36
quelle