2009-11-24 10 views
11

Niektóre z metod asercji NUnit są przeciążone, aby użyć ICollection, ale nie ICollection<T> i dlatego nie można z nich korzystać.Dlaczego i jak używać metod NUnit z ICollection <T>

Czy tak jest w pobliżu? Heck, czy robię coś głupiego?

Muszę zrezygnować z używania metody Assert.AreEqual, a nie specjalistycznych metod i sprawić, że moje testy będą brzydkie.

Każda rada?

Edit:

Dzięki za odpowiedzi. Metoda NUnit o numerze That wydaje się interesująca, więc zajrzę do niej później.

Znak prawidłowo wspomniał o tym, ale NUnit Collection Asserts są doskonałe. Niedawno użyłem ich w nowych testach i okazało się, że świetnie się z nimi pracują.

+0

Powinienem wspomnieć, w mojej klasie testuję. Zastępowanie typu zwrotu metody do listy zamiast IList rozwiązuje ten problem, ale z kolei wystawiam List , którego nie chcę z powodów poważnie omawianych na SO itp. Już. – Finglas

+0

Nie powinno być nic złego w używaniu linq do przekształcania kolekcji w listę, o ile nie zapewniasz niczego, czego nie ma w kolekcji. Zapewnienie, że metoda ForEach działa na przykład, byłoby złe. –

Odpowiedz

8

ICollection i ICollection<T> są różnymi umowami - jedna nie dziedziczy drugiej.

http://msdn.microsoft.com/en-us/library/system.collections.icollection_members.aspx http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx

Jeśli masz rodzajowe kolekcji można nazwać ToList() na nim i uzyskać List<T>, co dzieje się wdrożyć nierodzajową ICollection również. Następnie użyj tej listy w metodzie NUnit Assert.

+0

Smashing. Linq uratował dzień (jeszcze raz). Pozdrawiam, nie myślałem o tym. – Finglas

+1

Linq może nie ratować dnia, po prostu dając ci różowe wspomnienia, które później doprowadzą cię do rozczarowania. –

+0

Dobrze, że dał mi ToList(), jestem szczęśliwy. – Finglas

7

Istnieje zestaw CollectionAsserts, czy można dziedziczyć test z AssertHelper i użyć składni jak

Expect(actual, Is.EquivalentTo(expected)); 

spojrzenie na dokumentacji powinno dać składni dla ograniczeń, które odnoszą się do zbiorów.

Oto link (jest to wersja 2.5.2)

nb Expect jest tylko skrótem Assert.That ...

+0

Twoja odpowiedź jest lepsza niż zaakceptowana, jaka szkoda. Tylko 3 minuty spóźnienia na akceptację. –

9

ja nie wiem, czy to jest to, czego szukasz, ale w ogólnych zbiorach zamiast przy użyciu:

Assert.Contains(member, list); 

używam:

Assert.That(list.Contains(member)); 

który uważam za prawie tak czytelny.

Powiązane problemy