Я думаю, что самый простой и ясный способ заявить о желаемом равенстве - это сочетание ответа jerryjvl и комментария к его сообщению MEMark - объедините CollectionAssert.AreEqual
с методами расширения:
CollectionAssert.AreEqual(expected.ToArray(), actual.ToArray());
Это дает более подробную информацию об ошибке, чем ответ SequenceEqual, предложенный OP (он сообщит вам, какой элемент был найден, который был неожиданным). Например:
IEnumerable<string> expected = new List<string> { "a", "b" };
IEnumerable<string> actual = new List<string> { "a", "c" }; // mismatching second element
CollectionAssert.AreEqual(expected.ToArray(), actual.ToArray());
// Helpful failure message!
// CollectionAssert.AreEqual failed. (Element at index 1 do not match.)
Assert.IsTrue(expected.SequenceEqual(actual));
// Mediocre failure message:
// Assert.IsTrue failed.
Вы будете действительно довольны тем, что сделали это таким образом, если / когда ваш тест не пройден - иногда вы даже можете узнать, в чем дело, не вызывая отладчик - и эй, вы правильно делаете TDD Итак, вы сначала пишете провальный тест, верно? ; -)
Сообщения об ошибках становятся еще более полезными, если вы используете AreEquivalent
для проверки на эквивалентность (порядок не имеет значения):
CollectionAssert.AreEquivalent(expected.ToList(), actual.ToList());
// really helpful error message!
// CollectionAssert.AreEquivalent failed. The expected collection contains 1
// occurrence(s) of <b>. The actual collection contains 0 occurrence(s).