2010-09-28 26 views
6

Tôi thấy bản thân mình cần rất nhiều loại này logic thời gian gần đây:Có hạn chế Chỉ có một trong NUnit không?

Assert.That(collection.Items, Has.Member(expected_item)); 
Assert.That(collection.Items.Count(), Is.EqualTo(1)); 

Tôi thấy rằng NUnit cung cấp Has.SomeHas.All, nhưng tôi không thấy bất cứ điều gì như Has.One. Cách tốt nhất để thực hiện điều này mà không cần hai xác nhận là gì?

Trả lời

3

Tính đến NUnit 2.6 (không có mặt khi câu hỏi này được hỏi):

Assert.That(collection.Items, Has.Exactly(1).EqualTo(expected_item)); 

Has.Exactly "Áp dụng một hạn chế đối với từng hạng mục trong bộ sưu tập , thành công nếu số lượng mục được chỉ định thành công. " [1]

10

Bạn có thể thử một cái gì đó như thế này:

Assert.AreEqual(collection.Items.Single(), expected_item); 

Độc thân sẽ trở lại với mục duy nhất trong bộ sưu tập, hoặc ném một ngoại lệ nếu nó không chứa chính xác 1 mục.

Tôi không phải là quen thuộc với NUnit mặc dù, vì vậy ai đó có thể đưa ra một giải pháp tốt hơn mà không sử dụng một chức năng NUnit ...

EDIT: sau khi tìm kiếm nhanh chóng, chỉ NUnit chức năng mà dường như đến gần là Is.EquivalentTo(IEnumerable):

Assert.That(collection.Items, Is.EquivalentTo(new List<object>() {expected_item})); 

IMO tùy chọn đầu tiên đọc tốt hơn cho tôi, nhưng sau này có thể cung cấp một thông điệp ngoại lệ tốt hơn tùy thuộc vào sở thích của bạn.

+0

Câu trả lời hay. Tôi vẫn tự hỏi nếu không có một ràng buộc ẩn trong đó một nơi nào đó mà làm những gì tôi muốn, mặc dù .. nó có vẻ tự nhiên đủ, không? – ladenedge

+0

Cũng không thực sự tự nhiên, vì danh sách tự nhiên chứa bất kỳ số lượng mục nào và nếu bạn chỉ mong đợi một mục, nó sẽ đánh bại mục đích của danh sách :) – PostMan

+0

@PostMan - Hoàn toàn tự nhiên và rất phổ biến để mong đợi chính xác một mục trong một danh sách (hoặc, nói chung, một IEnumerable) cho một kịch bản thử nghiệm _specific_. –

3

Làm thế nào về

Assert.IsTrue(collection.Items.Count() == 1 && collection.Items.Contains(expected_item)); 

Tại sao nó không phải là đủ cho bạn?

+1

Do thông báo lỗi kém khi kiểm tra thất bại. Nếu số đếm khác với 1 _or_ mục không được tìm thấy trong bộ sưu tập, thông báo lỗi sẽ đơn giản là "Mong đợi: đúng; Nhưng là: sai" - vô dụng để xem nhanh những gì đã xảy ra. –

0

Nếu sở hữu Items có một indexer bạn có thể sử dụng


Assert.AreEqual(collection.Items[0], expected); 

+2

Không xác nhận rằng có chính xác một mục – PostMan

+0

Bạn là chính xác. Tôi bỏ lỡ điều đó. –

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