xUnit: утверждать, что два списка равны?

Привет, я новичок в TDD и xUnit, поэтому я хочу проверить свой метод, что-то вроде :

List<T> DeleteElements<T>(this List<T> a, List<T> b);

конечно, это не реальный способ :) Есть ли какой-либо метод Assert, который я могу использовать ? Я думаю, что-то вроде этого было бы хорошо

    List<int> values = new List<int>() { 1, 2, 3 };
    List<int> expected = new List<int>() { 1 };
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });

    Assert.Exact(expected, actual);

есть что-то подобное ?

3 ответов


xUnit.Net распознает коллекции, поэтому вам просто нужно сделать

Assert.Equal(expected, actual); // Order is important

вы можете увидеть другие доступные утверждения коллекции в CollectionAsserts.cs

на Нанит методы сравнения коллекции библиотеки

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

и

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

подробности здесь: CollectionAssert

MbUnit также имеет утверждения коллекции, похожие на NUnit: Assert.Коллекции.cs


в текущей версии XUnit (1.5) вы можете просто использовать

Assert.Равный (ожидаемый, фактический);

вышеуказанный метод будет делать элемент по элементу сравнения двух списков. Я не уверен, что это работает для любой предыдущей версии.


С xUnit, если вы хотите вишневый выбор свойств каждого элемента для тестирования, вы можете использовать Assert.Коллекция.

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

это проверяет ожидаемое количество и гарантирует, что каждое действие проверено.