Почему или как использовать методы NUnit с ICollection <T>
Некоторые из методов NUnit
перегружены, чтобы использовать ICollection
, но не ICollection<T>
, и поэтому вы не можете их использовать.
В любом случае, вокруг? Черт, я делаю что-то глупое?
Мне нужно вернуться к использованию Assert.AreEqual
, а не к специализированным методам и сделать мои тесты уродливыми.
Любые советы?
Edit:
Спасибо за ответы. Метод That
NUnit кажется интересным, поэтому я рассмотрю его позже.
Марк правильно упомянул об этом, но NUnit Collection Asserts отлично. Я недавно использовал их в некоторых новых тестах и нашел их превосходными для работы.
Ответы
Ответ 1
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.
Ответ 2
Я не знаю, это то, что вы ищете, но для общих коллекций, а не для использования:
Assert.Contains(member, list);
Я использую:
Assert.That(list.Contains(member));
который я считаю почти читаемым.
Ответ 3
Существует набор CollectionAsserts, или вы можете наследовать свой тест из AssertHelper и использовать синтаксис, например
Expect(actual, Is.EquivalentTo(expected));
Взгляд на документацию должен дать вам синтаксис ограничений, которые применяются к коллекциям.
Здесь ссылка (это версия 2.5.2)
N.B. Ожидание - это просто сокращение Assert.That...