2013-03-20 13 views
9

Ich mag eine Liste von Objekten vergleichen, um die Reihenfolge der Objekte in der Liste zu ignorieren und nur einige der Eigenschaften in den Objekten zu vergleichen, die derzeit diesen Vergleich auszuführen ich mit dem folgenden Code:Wie vergleicht man Listen mit fließenden Behauptungen?

actual.Should().NotBeNull(); 
actual.Count.Should().Be(expected.Count); 
//compare ignoring order 
foreach (var exp in expected) 
    actual.Should().Contain(act => 
     act.IndividualId.Equals(exp.IndividualId) 
     && act.Email.Equals(exp.Email) 
     && act.FirstName.Equals(exp.FirstName) 
     && act.LastName.Equals(exp.LastName) 
    ); 

Dies scheint jedoch weniger als ideal zu sein, da bei einem Fehler die erwarteten Werte nicht gedruckt werden. Gibt es einen eingebauten Mechanismus, um diesen Vergleich mit fließenden Aussagen durchzuführen?

Antwort

10

Momentan nicht. Wir haben die neue equivalency assertion Syntax von FA 2.0, aber das wird auch überprüfen, ob die Objekte in der richtigen Reihenfolge erscheinen. Für FA 2.1 versuche ich das zu unterstützen, aber ich bin mir nicht sicher, ob das funktionieren wird. Es bedeutet im Grunde, dass es das gesamte Objektdiagramm hinter einem Sammlungselement mit den Objektdiagrammen für jedes andere Element in der Sammlung vergleichen muss. Sicher wird es ziemlich langsam sein.

+0

Ist es möglich sagen zwei Listen Typen mit tatsächlichen.Should() vergleichen enthalten (erwartet)? – BraveNewMath

+0

Ja, Sie können tatsächlich tun. Sollen(). BeEquivalentTo (erwartet); –

+1

für die Flexibilität wir Serialisierung jedes Objekt in der Regel json dann verwenden String Vergleich, die Fehler Ausgabe sieht gut aus und Sie müssen nie aktualisieren Sie Ihre Unit-Test, wenn jemand eine neue Eigenschaft fügt –

Verwandte Themen