Утверждать - PullRequest
       4

Утверждать

19 голосов
/ 13 февраля 2009

Поскольку юнит-тестирование в нашей фирме не используется, я учу себя юнит-тестированию своего собственного кода. Я использую стандартную платформу .net для некоторых базовых тестов.

Мой метод возвращает IEnumerable<string>, и я хочу проверить его вывод. Так что я создал IEnumerable<string>, который должен был протестировать. Мне показалось, что я помню, что есть способ получить Assert.ArePartsEqual или что-то в этом роде, но, похоже, я не могу его найти.

Короче говоря, как мне проверить, если два IEnumerable<string> содержат одинаковые строки?

Ответы [ 3 ]

25 голосов
/ 17 февраля 2009

Я не знаю, на какую «стандартную среду тестирования .net» вы ссылаетесь, но если это средство тестирования системного модуля Visual Studio Team, вы можете использовать CollectionAssert .

Ваш тест будет выглядеть так:

CollectionAssert.AreEqual(ExpectedList, ActualList, "...");

Обновление: Я забыл, что CollectionAssert нужен интерфейс ICollection, поэтому вам придется вызывать ActualList.ToList (), чтобы он скомпилировался. Возвращение IEnumerable - хорошая вещь, поэтому не меняйте его только для тестов.

12 голосов
/ 13 февраля 2009

Требуется метод расширения SequenceEqual() (LINQ):

    string[] x = { "abc", "def", "ghi" };
    List<string> y = new List<string>() { "abc", "def", "ghi" };

    bool isTrue = x.SequenceEqual(y);

или просто:

   bool isTrue = x.SequenceEqual(new[] {"abc","def","ghi"});

(он вернет false, если они имеют разную длину или любой другой элемент)

5 голосов
/ 13 февраля 2009

У меня есть пример этого, который я использовал для своего выступления «Внедрение LINQ для объектов за 60 минут».

Это также в моем MoreLinq проекте. Попробовав перехватить это здесь, оно ужасно заворачивается. Просто захват от Github ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...