Почему и как использовать методы NUnit с ICollection‹T›

Некоторые из методов Assert NUnit перегружены для использования ICollection, но не ICollection<T>, поэтому вы не можете их использовать.

Есть ли что-нибудь вокруг этого? Черт, я делаю что-то глупое?

Мне приходится вернуться к использованию Assert.AreEqual, а не к специализированным методам, и это делает мои тесты уродливыми.

Любой совет?

Изменить:

Спасибо за ответы. Метод That NUnit кажется интересным, поэтому я рассмотрю его позже.

Марк правильно упомянул об этом, но утверждения коллекции NUnit превосходны. Недавно я использовал их в некоторых новых тестах и ​​нашел, что они отлично подходят для работы.


person Finglas    schedule 24.11.2009    source источник
comment
Я должен упомянуть, в моем классе я тестирую. Изменение типа возврата метода на List‹T› вместо IList решает эту проблему, но, в свою очередь, я выставляю List‹T›, который я не хочу делать по причинам, которые уже обсуждались на SO и т. д.. уже.   -  person Finglas    schedule 24.11.2009
comment
Не должно быть никакого вреда в использовании linq для превращения вашей коллекции в список, если вы не утверждаете ничего, чего нет в коллекции. Утверждать, что метод ForEach работает, например, было бы дурным тоном.   -  person Mark Dickinson    schedule 24.11.2009


Ответы (3)


ICollection и ICollection<T> это разные контракты - один не наследует другой.

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

Если у вас есть универсальная коллекция, вы можете вызвать для нее ToList() и получить List<T>, который также реализует неуниверсальный ICollection. Затем используйте этот список в методе NUnit Assert.

person Amy B    schedule 24.11.2009
comment
Сокрушительный. Linq спас положение (еще раз). Cпасибо, не подумал об этом. - person Finglas; 24.11.2009
comment
Linq, возможно, не спасает положение, а просто дарит вам розовые воспоминания, которые позже приведут к разочарованию. - person Mark Dickinson; 24.11.2009
comment
Что ж, это дало мне ToList(), я счастлив. - person Finglas; 24.11.2009

Я не знаю, это то, что вы ищете, но для общих коллекций вместо использования:

Assert.Contains(member, list);

Я использую:

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

который я нахожу почти таким же читаемым.

person Rian Schmits    schedule 24.11.2009

Существует набор CollectionAsserts, или вы можете унаследовать свой тест от AssertHelper и использовать такой синтаксис, как

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

Просмотр документации должен дать вам синтаксис ограничений, которые применяются к коллекциям.

Вот ссылка (это версия 2.5.2)

Н.Б. Expect — это просто сокращение от Assert. That...

person Mark Dickinson    schedule 24.11.2009
comment
Ваш ответ лучше принятого, как жаль. Всего на 3 минуты опоздали на приём. - person Alvaro Rodriguez; 05.09.2011