xUnit ( единица измерения ) :Утверждать, что два списка<T> равны?
-
03-07-2019 - |
Вопрос
Я новичок в 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);
Есть ли что - то подобное ?
Решение
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
Более подробная информация здесь: Коллекционный ассерт
MbUnit ( модуль ) также имеет утверждения коллекции, похожие на NUnit: Утверждать.Collections.cs
Другие советы
В текущей версии XUnit (1.5) вы можете просто использовать
Assert.Equal (ожидаемый, фактический);
Приведенный выше метод будет выполнять поэлементное сравнение двух списков. Я не уверен, работает ли это для какой-либо предыдущей версии.
В xUnit, если вы хотите выбрать свойства каждого элемента для проверки, вы можете использовать Assert.Collection.
Assert.Collection(elements,
elem1 => Assert.Equal(expect1, elem1.SomeProperty),
elem2 => {
Assert.Equal(expect2, elem2.SomeProperty);
Assert.True(elem2.TrueProperty);
});
Это проверяет ожидаемое количество и гарантирует, что каждое действие проверено.
Недавно я использовал пакеты xUnit 2.4.0
и Moq 4.10.1
в моем приложении asp.net core 2.2. Р>
В моем случае мне удалось заставить его работать в два этапа:
<Ол> IEqualityComparer < T >
Передайте экземпляр средства сравнения в качестве третьего параметра в метод Assert.True
:
Assert.True (ожидаемый, фактический, новый MyEqualityComparer ());
Но есть и другой более приятный способ получить тот же результат, используя пакет FluentAssertions . Это позволяет вам делать следующее:
// Assert
expected.Should().BeEquivalentTo(actual));
Интересно, что Assert.Equal ()
всегда дает сбой, даже когда я заказал элементы двух списков, чтобы получить их в одном порядке.