2012-01-24 28 views
5

FluentAssertions dường như thất bại với NullReferece ngoại lệ khi tôi thử so sánh hai bộ sưu tập với nullFluentAssertions Should.Equal vào bộ sưu tập, có chứa null

[Test] 
    public void DeepWithNulls() 
    { 
     var l1 = new List<string> { "aaa", null }; 
     var l2 = new List<string> { "aaa", null }; 

     l1.Should().Equal(l2); 
    } 

So sánh hoạt động như dự kiến ​​vào bộ sưu tập với không null.

Trả lời

4

này đang xảy ra do thực tế rằng sâu thẳm trong logic so sánh bộ sưu tập Assertion thạo sử dụng đoạn mã sau

for (int index = 0; index < expectedItems.Length; index++) 
      { 
       verification.ForCondition((index < actualItems.Length) && actualItems[index].Equals(expectedItems[index])) 
        .FailWith("Expected " + Verification.SubjectNameOr("collection") + 
         " to be equal to {0}{reason}, but {1} differs at index {2}.", expected, Subject, index); 
      } 

trong mã trên expectedItemsactualItems là danh sách của bạn

Bây giờ nghĩ điều gì sẽ xảy ra trong suốt lặp lại thứ hai khi (phần dưới đây) sẽ được thực hiện?

actualItems[index].Equals(expectedItems[index])

như actualItems[1]null nên nó ném null tham chiếu ngoại lệ

+0

Boom - 10K. Bạn được chào đón :) –

+1

Có một số cách giải quyết với Khẳng định thành thạo không? Hoặc tôi phải sử dụng chu kỳ trong các bài kiểm tra đơn vị nếu tôi chắc chắn rằng nulls là bình thường đối với các bộ sưu tập được kiểm tra? – tensorsigma

+0

cho bây giờ tôi sẽ đề nghị chắc chắn rằng không có null trong bộ sưu tập trước khi gọi bằng nhau và tập tin một lỗi trên trang web 'codeplex' của' fluentassertion'. Một tùy chọn khác có thể là tải xuống nguồn và tự khắc phục sự cố :) –

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