2010-09-28 7 views
6

:NUnit'te Has-Only-One kısıtlaması var mı? Son zamanlarda mantık bu tür bir çok ihtiyacı kendimi buluyorum

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

ben NUnit Has.Some ve Has.All sunduğu görüyorum ama Has.One böyle bir şey görmüyorum. Bunu iki önermeden yapmanın en iyi yolu nedir?

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

Tek koleksiyonundaki tek öğeyi döndürür veya tam olarak 1 öğe içermiyorsa bir istisna:

cevap

3

kullanabilirsiniz:

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

Has.Exactly "Bir koleksiyonunda her öğe için bir sınırlama uygular Belirtilen öğe sayısı başarılı olursa başarılı olur. " [1]

10

Böyle bir şey deneyebilirsiniz. birisi bir NUnit işlevini kullanın does daha iyi bir çözüm sunabilir yüzden olsa NUnit ile aşina değilim

...

DÜZENLEME: Hızlı bir aramadan sonra, görünüyor sadece NUnit işlevi yakın gelmek

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

IMO ilk seçenek bana daha iyi okur, ancak ikincisi tercihlerinize bağlı daha iyi bir durum mesajı verebilir: Is.EquivalentTo(IEnumerable) olduğunu.

+0

İyi yanıt. Yine de, istediğimi yapan bir yerde saklanmak için bir kısıtlama olmasa bile merak ediyorum ... ama yeterince doğal görünüyor, değil mi? – ladenedge

+0

Doğal olarak, bir liste doğal olarak herhangi bir miktarda ürün içerdiğinden ve sadece bir tane bekliyorsanız, listenin amacını yener :) – PostMan

+0

@PostMan - Tam olarak tek bir öğe beklemek çok doğal ve çok yaygın _specific_ test senaryosu için bir listede (veya genel olarak bir IEnumerable). –

3

Nasıl sizin için yeterli değildir Neden

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

hakkında? Öğeler mülkiyet indexleyici sahiptir

+1

Test başarısız olduğunda zayıf hata mesajından dolayı. Sayım 1 _or_'den farklıysa, koleksiyonda bulunmadı, hata mesajı sadece "Beklenen: doğru; Ama:: yanlış" olurdu - neyin yanlış gittiğini hızlıca görmek için işe yaramaz. –

0

Eğer NUnit 2.6 (değil etrafında bu soru sorulduğunda) itibariyle


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

+2

Tam olarak bir tane öğe olduğunu doğrulamıyor – PostMan

+0

Siz haklısınız. Onu özledim. –

İlgili konular