2013-03-12 17 views
5

W moich NUnit/FluentAssertions testów porównam złożony obiekt zwrócony z mojego systemu z jednego odniesienia za pomocą następującego kodu:Jak wykluczyć właściwość wszystkich elementów w IEnumerable przy użyciu opcji ShouldBeEquivalentTo?

response.ShouldBeEquivalentTo(reference, o => o.Excluding(x => x.OrderStatus) 
               .Excluding(x => x.Id) 
               .Excluding(x => x.Items[0].Name) 
               .Excluding(x => x.Items[0].Article) 
               .Excluding(x => x.ResponseStatus)); 

Jednakże, nie jest to dokładnie to, co zamierzałem. Chciałbym wykluczyć Name i Article dla każdego obiektu na liście Items, a nie tylko dla 0. Jak mogę wdrożyć ten scenariusz?

Sprawdziłem przez documentation i nie znalazłem rozwiązania. Czy czegoś brakuje?

Odpowiedz

7

Istnieje przeciążenie funkcji Excluding(), która zapewnia ISubjectInfo, której można użyć do bardziej zaawansowanych kryteriów wyboru. Przy takim przeciążeniu możesz zrobić takie rzeczy jak:

subject.ShouldBeEquivalentTo(expected, config => 
       config.Excluding(ctx => ctx.PropertyPath == "Level.Level.Text")); 
+0

Jak dokładnie powinienem używać PropertyPath w moim przykładzie? Próbowałem PropertyPath == "Items.Name" i "Order.Items.Name", ale to nie działa. – kojo

+1

Co z ctx.PropertyPath.EndsWith ("]. Name") || ctx.PropertyPath.EndsWith ("]. Artykuł")? –

+0

To działa, dziękuję. Myślę, że powinienem użyć wyrażenia regularnego, jeśli chcę również dopasować nazwę kolekcji. Czy jest jakaś dokumentacja dotycząca tego, jak dokładnie będzie wyglądać właściwość PropertyPath w różnych okolicznościach? – kojo