Trong thử nghiệm đơn vị C# của tôi, tôi thường truy vấn danh sách các hàng dựa trên danh sách ID. Sau đó tôi muốn đảm bảo rằng 1) cho tất cả các ID, có ít nhất một hàng được tìm thấy có ID đó và 2) cho tất cả các hàng được trả về, mỗi hàng có một ID nằm trong danh sách ID để tìm. Dưới đây là cách tôi thường đảm bảo rằng:so sánh danh sách hai chiều trong thử nghiệm đơn vị C#
Tôi nghĩ rằng việc sử dụng các Any
và All
thuận tiện cho việc kiểm tra như vậy, nhưng tôi muốn xem có ai nghĩ đây là ít có thể đọc hơn nó có thể được, hoặc nếu có có lẽ một cách tốt hơn để thực hiện kiểm tra hai chiều như thế này. Tôi đang sử dụng MSTest trong Visual Studio 2008 Team System để kiểm tra đơn vị. Điều này có lẽ nên là cộng đồng wiki nếu nó quá chủ quan.
Edit: bây giờ tôi đang sử dụng một giải pháp dựa trên gợi ý Aviad P., và cũng thực tế là thử nghiệm sau đi:
string[] ids1 = { "a", "b", "c" };
string[] ids2 = { "b", "c", "d", "e" };
string[] ids3 = { "c", "a", "b" };
Assert.AreEqual(
1,
ids1.Except(ids2).Count()
);
Assert.AreEqual(
2,
ids2.Except(ids1).Count()
);
Assert.AreEqual(
0,
ids1.Except(ids3).Count()
);
Điều này có vẻ tốt, và tôi thích cách tôi sẽ viết 'x [primaryKey]' chỉ một lần. Tuy nhiên, tôi nghĩ rằng nó nên là 'Count() == 0', xem xét như thế nào' Ngoại trừ' được mô tả. –
Trên thực tế, bạn cần giữ lại> 0, nhưng trao đổi các tin nhắn xung quanh. Đã sửa đổi câu trả lời của tôi. –
Tại sao bạn cần '> 0'? Tôi hy vọng không có sự khác biệt nào giữa danh sách ID kết quả được truy xuất và danh sách ID mà tôi truy vấn. Intellisense mô tả 'Ngoại trừ' khi tạo ra "sự khác biệt thiết lập của hai chuỗi". –