Tôi có một lớp thực hiện ICollection<SomeConcreteClass>
. Các hạn chế về bộ sưu tập NUnit không nhận ra nó như một bộ sưu tập.Điều gì làm cho lớp học trở thành một bộ sưu tập theo các hạn chế về bộ sưu tập NUnit?
ví dụ: Assert.That(sut, Has.No.Member(someObjectOfTypeSomeConcreteClass));
ném System.ArgumentException : The actual value must be a collection
và Assert.That(sut, Is.Empty);
không thành công với sản phẩm nào sut
.
Vậy khi nào là tập hợp một bộ sưu tập (theo NUnit)?
Stack Trace:
System.ArgumentException : The actual value must be a collection Parametername: actual
at NUnit.Framework.Constraints.CollectionConstraint.Matches(Object actual)
at NUnit.Framework.Constraints.NotConstraint.Matches(Object actual)
MyTestFile.cs(36,0): at MyAssembly.MyTestFixture.MyTestMethod()
vấn đề trên xảy ra với NUnit 2.4.3.0. Tôi chỉ thử nó với 2.6. Is.Empty
hoạt động ngay bây giờ, nhưng Has.No.Member
vẫn không thành công. Nó thậm chí không gọi Equals()
hoặc operator ==()
. So sánh các yếu tố thu thập như thế nào? RhinoMocks Arg<MyCollection>.List.Count(Is.Equal(1))
hiện cũng không thành công.
Kết luận:
Với NUnit 2.4 bộ sưu tập các ràng buộc yêu cầu thực hiện ICollection phi chung cho các bộ sưu tập được công nhận là một bộ sưu tập (có trả lời cho câu hỏi ban đầu). IEnumerable bình đẳng hoạt động như mong đợi.
Với NUnit 2.6 (và có thể 3.0) bình đẳng của IEnumerable
s được kiểm tra bằng các yếu tố phù hợp ngay cả khi Equals
bị ghi đè. Đó là lý do tại sao ràng buộc thành viên không hoạt động nếu các phần tử là chính các số IEnumerable
. Đây là một vấn đề đã biết (https://bugs.launchpad.net/nunit-3.0/+bug/646786).
Để biết chi tiết, hãy xem câu trả lời của riêng tôi.
bạn có thể đăng stack đầy đủ của ném ngoại lệ? –