tôi có trong bộ kiểm tra của tôi một bài kiểm tra mà đi một cái gì đó như thế này:Cách thành ngữ để xác minh kích thước bộ sưu tập trong xUnit là gì?
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
thử nghiệm này hoạt động như tôi mong đợi, nhưng khi tôi chạy nó xUnit in một 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ó 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 bộ sưu tập, thì sao?
Để làm rõ: Tôi nhận ra rằng tôi có thể "lừa" xUnit không phát ra cảnh báo này bằng ví dụ: giải nén biến hoặc sử dụng Assert.True(stuff.Count() == 1)
thay thế. Cái sau chỉ là hacky, và cái cũ cảm thấy như xUnit là ví dụ. cố gắng tránh nhiều lần lặp lại của IEnumerable<T>
, thì đây là cách sai để đi (vì tôi sẽ nhận được gợi ý trình biên dịch về điều đó một cách riêng biệt, nếu đó là vấn đề) và xUnit không bao giờ phải đánh giá đầu vào nhiều hơn một lần (trong thực tế nó có thể sẽ nhận được cùng một đầu vào bất kể khai thác 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 tôi. 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 ở địa điểm đầu tiên và lý do tại sao bất kỳ phương pháp nào tôi nên sử dụng thay thế tốt hơn.
nếu bạn lưu trữ 'stuffCollection.Count()' trong một biến riêng biệt và chuyển nó cho xác nhận nó có cung cấp cho bạn cùng một lỗi không? – hellyale
Có thể [this one] (https://stackoverflow.com/a/30815958/107625)? –