Как действительно Утверждает. AreEqual определяют равенство между двумя универсальными IEnumerables?

Из 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.");

35
задан J0e3gan 6 November 2014 в 18:59
поделиться

3 ответа

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 , но он настолько прост, насколько это возможно.

25
ответ дан 27 November 2019 в 06:20
поделиться

Нашел:

Assert.IsTrue(expected.SequenceEqual(actual));
88
ответ дан 27 November 2019 в 06:20
поделиться

Рассматривали ли вы использование вместо этого класса CollectionAssert ... учитывая, что он предназначен для проверки на равенство коллекций?

Добавление:
Если сравниваемые «коллекции» являются перечислениями, то просто заключить их в оболочку с помощью « new List (enumeration) ». самый простой способ провести сравнение. Создание нового списка, конечно, вызывает некоторые накладные расходы, но в контексте модульного теста это не должно иметь большого значения, я надеюсь?

48
ответ дан 27 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: