Есть ли в NUnit ограничение Has-Only-One? - PullRequest
6 голосов
/ 28 сентября 2010

В последнее время я чувствую, что мне нужна такая логика:

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

Я вижу, что NUnit предлагает Has.Some и Has.All, но я не вижу ничего подобного Has.One. Какой лучший способ сделать это без двух утверждений?

Ответы [ 5 ]

10 голосов
/ 28 сентября 2010

Вы можете попробовать что-то вроде этого:

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

Single вернет единственный элемент в коллекции или сгенерирует исключение, если он не содержит ровно 1 элемент.

Я не очень знаком с NUnit, поэтому кто-то может предложить лучшее решение, использующее функцию NUnit ...

РЕДАКТИРОВАТЬ: после быстрого поиска единственная функция NUnit, которая кажется близкой, это Is.EquivalentTo(IEnumerable):

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

IMO первый вариант читается лучше для меня, но последний может дать лучшее сообщение об исключении в зависимости от ваших предпочтений.

3 голосов
/ 28 сентября 2010

Как насчет

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

Почему вам этого недостаточно?

2 голосов
/ 05 марта 2015

Начиная с NUnit 2.6 (нет, когда задавался этот вопрос):

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

Has.Exactly "Применяет ограничение к каждому элементу в коллекции, успешно выполненное, если указанное количество элементов выполнено успешно." [1]

1 голос
/ 18 октября 2018

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

Assert.That(collection.Items, Has.Count.EqualTo(1).And.All.EqualTo(expected_item));

Вот какполучить лучшее сообщение об ошибке в случае сбоя.Второй лучший способ - это отредактированный ответ @ BubbleWrap, который выполняет работу по утверждению, но с той же ошибкой, если в вашей коллекции более одного элемента или элемент не является ожидаемым.

0 голосов
/ 28 сентября 2010

Если свойство Items имеет индексатор, вы можете использовать


Assert.AreEqual(collection.Items[0], expected);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...