2013-03-12 15 views
5

Trong các thử nghiệm/FluentAssertions NUnit tôi so sánh các đối tượng phức tạp trở về từ hệ thống của tôi với một tài liệu tham khảo sử dụng đoạn mã sau:Làm cách nào để loại trừ thuộc tính của tất cả các mục trong IEnumerable khi sử dụng 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)); 

Tuy nhiên, đây không phải là chính xác những gì tôi mong đợi. Tôi muốn loại trừ NameArticle cho mỗi đối tượng trong danh sách Items và không chỉ cho số 0. Làm cách nào để triển khai kịch bản này?

Tôi đã xem qua documentation và không tìm thấy giải pháp. Tui bỏ lỡ điều gì vậy?

Trả lời

7

Có quá tải về Loại trừ() cung cấp ISubjectInfo mà bạn có thể sử dụng cho các tiêu chí lựa chọn nâng cao hơn. Với tình trạng quá tải đó, bạn có thể làm những việc như:

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

Tôi nên sử dụng PropertyPath như thế nào trong ví dụ của mình? Tôi đã thử PropertyPath == "Items.Name" và "Order.Items.Name" nhưng nó không hoạt động. – kojo

+1

Còn ctx.PropertyPath.EndsWith ("]. Name") || ctx.PropertyPath.EndsWith ("]. Điều")? –

+0

Điều đó có hiệu quả, cảm ơn bạn. Tôi đoán, tôi nên sử dụng một regex nếu tôi muốn phù hợp với một tên bộ sưu tập là tốt. Có tài liệu nào ở bất kỳ đâu về chính xác PropertyPath trông như thế nào trong các trường hợp khác nhau không? – kojo