xUnit ( единица измерения ) :Утверждать, что два списка<T> равны?

StackOverflow https://stackoverflow.com/questions/419659

  •  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 () всегда дает сбой, даже когда я заказал элементы двух списков, чтобы получить их в одном порядке.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top