Утвердить IEnumerables
Поскольку модульное тестирование не используется в нашей фирме, я преподаю себе unit test свой собственный код.
Я использую стандартную среду тестирования .net для некоторого действительно базового модульного тестирования.
Метод my возвращает a IEnumerable<string>
, и я хочу проверить его вывод.
Поэтому я создал IEnumerable<string>
, который должен протестировать его.
Я думал, что я вспомнил, что есть способ Assert.ArePartsEqual
или что-то в этом роде, но я не могу найти его.
Короче говоря, как я могу проверить, содержат ли два IEnumerable<string>
одни и те же строки?
Ответы
Ответ 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...