저는 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.0
및 Moq 4.10.1
패키지를 사용 하고 있었습니다 .
제 경우에는 두 단계 프로세스로 작동하도록 관리했습니다.
-
구현 정의
IEqualityComparer<T>
-
비교 자 인스턴스를 세 번째 매개 변수로
Assert.True
메서드에 전달합니다.Assert.True(expected, actual, new MyEqualityComparer());
그러나 FluentAssertions 패키지를 사용하여 동일한 결과를 얻는 또 다른 좋은 방법이 있습니다 . 다음을 수행 할 수 있습니다.
// Assert
expected.Should().BeEquivalentTo(actual));
흥미롭게 Assert.Equal()
도 두 목록의 요소를 동일한 순서로 가져 오도록 주문하더라도 항상 실패합니다.