Почему этот метод теста не работает? - PullRequest
7 голосов
/ 22 февраля 2011

Вот моя тестовая функция (c #, visual studio 2010):

[TestMethod()]
public void TestGetRelevantWeeks()
{
List<sbyte> expected = new List<sbyte>() { 2, 1, 52, 51, 50, 49, 48, 47, 46, 45 };
List<sbyte> actual = new List<sbyte>() { 2, 1, 52, 51, 50, 49, 48, 47, 46, 45 };
Assert.AreEqual<List<sbyte>>(expected, actual);
}

Исключение: Failed TestGetRelevantWeek Assert.AreEqual не удалось.
Ожидается: System.Collections.Generic.Список 1 [System.SByte].
Факт: System.Collections.Generic.List 1 [System.SByte].


Проверяет ли AreEqual равенство только ссылки, а не содержимого?

Но тогда сообщение об исключении может привести к путанице.Я также не смог найти документацию по умолчанию для сравнения равенств для общего списка.

Не могли бы вы помочь прояснить, почему тест не пройден и каковы решения для проверки равенства содержимого обоих списков?

С уважением

Ответы [ 3 ]

9 голосов
/ 22 февраля 2011

Метод Assert.AreEqual() выполняет тест на равенство ссылок, как вы и ожидали.

Предполагая, что вы используете .Net 3.5 или выше, вы можете сделать это:

using System.Linq;

Assert.IsTrue(expected.SequenceEqual(actual));

Редактировать: Уточнено, когда эта опция доступна.

8 голосов
/ 22 февраля 2011

AreEqual проверяет только равенство ссылки, а не содержимого?

Yeap.

Для проверки содержимого вы можете:

Assert.AreEqual(expected.Count, actual.Count);
for (var i = 0; i < expected.Count; i++)
{
    Assert.AreEqual(expected[i], actual[i]);
}
2 голосов
/ 22 февраля 2011

Я думаю, что это то, что вы ищете:

Assert.IsTrue(expected.SequenceEqual(actual));

Проверьте этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...