Можно ли использовать Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert для IEnumerable <T>? - PullRequest
4 голосов
/ 13 января 2010

У меня есть сценарий тестирования, в котором я хочу проверить, равны ли две коллекции. Я нашел класс Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert, но он работает только на ICollection<T>. Поскольку я тестирую репозиторий для Entity Framework, и поэтому мне нужно сравнить IObjectSet<T> s, это не сработает - IObjectSet<T> не реализует ICollection<T>.

Могу ли я использовать этот класс для сравнения собраний или мне нужно создать собственную реализацию? (И почему, черт возьми, команда Microsoft не заставила класс работать с IEnumerable<T>, поскольку это «базовый интерфейс» для коллекций?)

РЕДАКТИРОВАТЬ: Это мой тестовый код:

// Arrange
var fakeContext = new FakeObjectContext();
var dummies = fakeContext.Dummies;
var repo = new EFRepository<DummyEntity>(fakeContext);

// Act
var result = repo.GetAll();

// Assert
Assert.IsNotNull(result, NullErrorMessage(MethodName("GetAll")));
Assert.IsInstanceOfType(result, typeof(IEnumerable<DummyEntity>), IncorrectTypeMessage(MethodName("GetAll"), typeof(IEnumerable<DummyEntity>)));
CollectionAssert.AreEqual(dummies.ToList(), result.ToList());

Вызвать CollectionAssert.AreEqual в последней строке не удалось, заявив, что элементы с индексом 0 не равны. Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 16 января 2010

Нахальный вариант (хотя и не так много информации) - утверждать, что expected.SequenceEqual(actual) возвращает true.

Вы могли бы написать метод-обертку, который вызывает коллекцию (.ToList() для каждого)? Но, честно говоря, вы можете просто позвонить .ToList() в коде модульного теста:

CollectionAssert.AreEqual(expected.ToList(), actual.ToList()); // but tidier...
2 голосов
/ 16 января 2010

Если вы сравниваете наборы результатов, вы можете использовать CollectionAssert.AreEquivalent , который будет игнорировать порядок. Вы также должны убедиться, что вы ввели Equals для сравниваемых типов элементов.

...