Tôi có trong bộ thử nghiệm của mình một bài kiểm tra giống như sau:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Kiểm tra này hoạt động như tôi mong đợi, nhưng khi tôi chạy nó xUnit sẽ in cảnh báo:
cảnh báo xUnit2013: Không sử dụng Assert.Equal () để kiểm tra kích thước bộ sưu tập.
Tuy nhiên, không có giải pháp thay thế nào được đề xuất trong cảnh báo và tìm kiếm trên google đưa tôi đến mã nguồn trong xUnit để kiểm tra xác minh cảnh báo này được in.
Nếu Assert.Equal()
không phải là cách chính xác để xác minh độ dài của tập hợp, thì đó là gì?
Để làm rõ: Tôi nhận ra rằng tôi có thể "lừa" xUnit không đưa ra cảnh báo này bằng cách trích xuất một biến hoặc sử dụng Assert.True(stuff.Count() == 1)
thay thế. Cái thứ hai chỉ là hacky và cái thứ nhất có cảm giác như nếu xUnit đang cố gắng tránh nhiều lần lặp lại của một IEnumerable<T>
, thì đây là cách làm sai (bởi vì tôi sẽ nhận được gợi ý trình biên dịch về điều đó riêng nếu nó là một vấn đề) và xUnit chính nó sẽ không bao giờ phải đánh giá đầu vào nhiều lần (trên thực tế, nó có thể sẽ nhận được cùng một đầu vào bất kể trích xuất biến, vì cách gọi hàm C # hoạt động).
Vì vậy, tôi không chỉ quan tâm đến việc xóa cảnh báo đó khỏi đầu ra của mình. Câu trả lời cho câu hỏi của tôi cũng giải thích lý do tại sao cảnh báo đó được đưa vào thư viện ngay từ đầu và tại sao tôi nên sử dụng bất kỳ phương pháp nào để thay thế thì tốt hơn.
stuffCollection.Count()
trong một biến riêng biệt và chuyển nó vào xác nhận thì nó có gây ra lỗi tương tự cho bạn không?