Подтвердить что ты не робот

Утвердить IEnumerables

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

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

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

4b9b3361

Ответ 1

Я не знаю, к какой "стандартной тестовой среде .NET" вы обращаетесь, но если это Visual Studio Team System Unit, то вы можете использовать CollectionAssert.

Ваш тест будет таким:

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

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

Ответ 2

Вам нужен метод расширения 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, если они имеют разные длины, или любой элемент отличается)

Ответ 3

У меня есть пример этого, который я использовал для разговора "Реализация LINQ to Objects за 60 минут".

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