Из MSDN http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.aspx
MailMessage message = new MailMessage(
"jane@contoso.com",
"ben@contoso.com",
"Quarterly data report.",
"See the attached spreadsheet.");
Assert.AreEqual
будет сравнивать два имеющихся объекта. IEnumerable
являются типами сами по себе и предоставляют механизм для итерации по некоторой коллекции ... но на самом деле они не являются этой коллекцией. Ваше исходное сравнение сравнивало два IEnumerable
s, что является допустимым сравнением ... но не тем, что вам нужно. Вам нужно было сравнить , что два IEnumerable
были предназначены для перечисления .
Вот как я сравниваю два перечисляемых объекта:
Assert.AreEqual(t1.Count(), t2.Count());
IEnumerator<Token> e1 = t1.GetEnumerator();
IEnumerator<Token> e2 = t2.GetEnumerator();
while (e1.MoveNext() && e2.MoveNext())
{
Assert.AreEqual(e1.Current, e2.Current);
}
Я не уверен, меньше ли приведенное выше код чем ваш метод .Zip
, но он настолько прост, насколько это возможно.
Нашел:
Assert.IsTrue(expected.SequenceEqual(actual));
Рассматривали ли вы использование вместо этого класса CollectionAssert
... учитывая, что он предназначен для проверки на равенство коллекций?
Добавление:
Если сравниваемые «коллекции» являются перечислениями, то просто заключить их в оболочку с помощью « new List
». самый простой способ провести сравнение. Создание нового списка, конечно, вызывает некоторые накладные расходы, но в контексте модульного теста это не должно иметь большого значения, я надеюсь?