[c#] xUnit : 두 개의 List <T>가 동일하다고 주장합니까?

저는 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 에서 사용 가능한 다른 컬렉션 어설 션을 볼 수 있습니다.

들어 NUnit과 라이브러리 모음 비교 방법은

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

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

자세한 내용은 여기 : CollectionAssert

MbUnit 에는 NUnit : Assert.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);
  });

이는 예상 개수를 테스트하고 각 작업이 확인되었는지 확인합니다.


답변

최근에 asp.net 코어 2.2 앱에서 xUnit 2.4.0Moq 4.10.1패키지를 사용 하고 있었습니다 .

제 경우에는 두 단계 프로세스로 작동하도록 관리했습니다.

  1. 구현 정의 IEqualityComparer<T>

  2. 비교 자 인스턴스를 세 번째 매개 변수로 Assert.True메서드에 전달합니다.

    Assert.True(expected, actual, new MyEqualityComparer());

그러나 FluentAssertions 패키지를 사용하여 동일한 결과를 얻는 또 다른 좋은 방법이 있습니다 . 다음을 수행 할 수 있습니다.

// Assert          
expected.Should().BeEquivalentTo(actual));

흥미롭게 Assert.Equal()도 두 목록의 요소를 동일한 순서로 가져 오도록 주문하더라도 항상 실패합니다.


답변