Mam w swoim zestawie testów test, który wygląda mniej więcej tak:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Ten test działa zgodnie z oczekiwaniami, ale kiedy go uruchamiam, xUnit wyświetla ostrzeżenie:
ostrzeżenie xUnit2013: Nie używaj funkcji Assert.Equal () do sprawdzania rozmiaru kolekcji.
Jednak ostrzeżenie nie sugeruje żadnej alternatywy, a wyszukiwarka Google przenosi mnie do kodu źródłowego w xUnit w celu wydrukowania testu, który weryfikuje to ostrzeżenie.
Jeśli Assert.Equal()
nie jest to właściwy sposób sprawdzenia długości kolekcji, to co to jest?
Dla wyjaśnienia: zdaję sobie sprawę, że mógłbym „oszukać” xUnit, aby nie emitował tego ostrzeżenia, np. Wyodrębniając zmienną lub używając Assert.True(stuff.Count() == 1)
zamiast tego. To drugie jest po prostu hacky, a pierwsze wydaje się, że jeśli xUnit próbuje np. Uniknąć wielu iteracji an IEnumerable<T>
, to jest to niewłaściwa droga (ponieważ otrzymam wskazówki kompilatora na ten temat osobno, jeśli jest to problem), i xUnit Sama nigdy nie powinna musieć oceniać danych wejściowych więcej niż raz (w rzeczywistości prawdopodobnie otrzyma te same dane wejściowe niezależnie od wyodrębniania zmiennych, ze względu na to, jak działa wywołanie funkcji C #).
Nie jestem więc zainteresowany tylko usunięciem tego ostrzeżenia z moich wyników. Odpowiedź na moje pytanie wyjaśnia również, dlaczego to ostrzeżenie jest zawarte w bibliotece w pierwszej kolejności i dlaczego jakiekolwiek podejście, które powinienem zastosować, jest lepsze.
stuffCollection.Count()
w osobnej zmiennej i przekazujesz ją do potwierdzenia, czy daje to ten sam błąd?