Jestem nowy w TDD i xUnit, więc chcę przetestować moją metodę, która wygląda mniej więcej tak:
List<T> DeleteElements<T>(this List<T> a, List<T> b);
Czy jest jakaś metoda Assert, której mogę użyć? Myślę, że coś takiego byłoby fajne
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);
Czy jest coś takiego?
W obecnej wersji XUnit (1.5) możesz po prostu użyć
Powyższa metoda wykona porównanie element po elemencie obu list. Nie jestem pewien, czy to działa w przypadku jakiejkolwiek wcześniejszej wersji.
źródło
W przypadku xUnit, jeśli chcesz wybrać najlepsze właściwości każdego elementu do przetestowania, możesz użyć Assert.Collection.
To sprawdza oczekiwaną liczbę i zapewnia, że każda akcja jest zweryfikowana.
źródło
Ostatnio używałem
xUnit 2.4.0
iMoq 4.10.1
pakietów w mojej aplikacji asp.net core 2.2.W moim przypadku udało mi się to zadziałać w dwóch etapach:
Zdefiniowanie implementacji
IEqualityComparer<T>
Przekaż instancję porównującą jako trzeci parametr do
Assert.True
metody:Assert.True(expected, actual, new MyEqualityComparer());
Ale jest inny przyjemniejszy sposób na uzyskanie tego samego wyniku przy użyciu pakietu FluentAssertions . Umożliwia wykonanie następujących czynności:
Co ciekawe, to
Assert.Equal()
zawsze zawodzi, nawet jeśli zamówiłem elementy dwóch list, aby uzyskać je w tej samej kolejności.źródło