2017-10-09 47 views
27

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.

+0

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

+0

Có thể [this one] (https://stackoverflow.com/a/30815958/107625)? –

Trả lời

29

Xunit cung cấp các bản sửa lỗi nhanh cho hầu hết các cảnh báo của nó, vì vậy bạn sẽ có thể thấy những gì nó nghĩ là "đúng".

xunit

Trong trường hợp của bạn, nó muốn bạn sử dụng Assert.Single kể từ khi bạn đang mong đợi một cách chính xác một mục. Nếu bạn đã xác nhận một số tùy ý, như 412, thì nó sẽ không cảnh báo bạn về việc sử dụng Count. Nó sẽ chỉ đề xuất sử dụng Single nếu bạn đang mong đợi một mục hoặc Empty nếu bạn không mong đợi mục nào.

+3

Cảm ơn, điều đó có ý nghĩa. FWIW, tôi đã nhìn thấy điều này khi xây dựng trong VS Code, nơi hành động nhanh chóng không hiển thị, vì vậy thực sự bao gồm đề xuất sửa lỗi trong thông báo cảnh báo sẽ hữu ích hơn nhiều. –

+1

@TomasLycken - ah. Có vấn đề ở đây: https://github.com/xunit/xunit/issues/1423 – vcsjones

Các vấn đề liên quan