Как в NUnit проверить, что коллекция содержит (или не содержит) заданный элемент?

2

В тесте нужно проверить коллекцию на наличие/отсутствие определенных элементов. Есть ли для этого специальные возможности? Хочется использовать более понятную запись, чем

Assert.That(list.Contains("item1"));
Assert.That(list.Contains("item2"), Is.False);

Есть ли синтаксис специально для коллекций? Что-то типа

Assert.That(list, Contains.Item("item1"));

Новые ответы


2

В NUnit 2.4.2 появился helper-класс Has для написания ассертов, проверяющих коллекции. Кроме того, стандартный хелпер Is тоже может быть применен для некоторых проверок. Вот пример из официальной документации:

int[] iarray = new int[] { 1, 2, 3 };
string[] sarray = new string[] { "a", "b", "c" };

// Проверяем, что в массиве нет пустых элементов
Assert.That( iarray, Is.All.Not.Null );
// Проверяем, что в массиве только строки
Assert.That( sarray, Is.All.InstanceOfType(typeof(string)) );
// Проверяем, что все элементы больше чем 0    
Assert.That( iarray, Is.All.GreaterThan(0) );

// Проверяем уникальность                 
Assert.That( sarray, Is.Unique );

// Проверка на наличие/отсутствие элементов
Assert.That( iarray, Has.Member(3) );
Assert.That( sarray, Has.Member("b") );
Assert.That( sarray, Has.No.Member("x") );

// Проверки на эквивалентность
Assert.That( 
    new string[] { "c", "a", "b" }, 
    Is.EquivalentTo( sarray ) );
Assert.That( new int[] { 1, 2, 2 }, Is.Not.EquivalentTo( iarray ) );
Assert.That( new int[] { 1, 3 }, Is.SubsetOf( iarray ) );
Alexander

Там помимо метода That есть еще куча интересных вещей. К примеру, вхождение в коллекцию по-моему можно проверить так:

Assert.Contains(object expected, ICollection actual)

А для проверки на эквивалентность можно использовать

Assert.AreEqual(...)

с кучей перегрузок.

admax

Ну это как бы устаревший синтаксис. Сейчас рекомендуется использовать Assert.That(), потому что полученный код легче читается и вообще выглядит консистентнее.


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.