J'ai dans ma suite de tests un test qui ressemble à ceci:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Ce test fonctionne comme prévu, mais lorsque je l'exécute, xUnit affiche un avertissement:
avertissement xUnit2013: n'utilisez pas Assert.Equal () pour vérifier la taille de la collection.
Cependant, aucune alternative n'est suggérée dans l'avertissement, et une recherche Google m'amène au code source dans xUnit pour le test qui vérifie que cet avertissement est imprimé.
Si ce Assert.Equal()
n'est pas la bonne façon de vérifier la longueur d'une collection, qu'est-ce que c'est?
Pour clarifier: je me rends compte que je pourrais "tromper" xUnit pour ne pas émettre cet avertissement en extrayant par exemple une variable ou en utilisant à la Assert.True(stuff.Count() == 1)
place. Ce dernier est juste hacky, et le premier donne l'impression que si xUnit essaie par exemple d'éviter plusieurs itérations d'un IEnumerable<T>
, alors c'est la mauvaise façon de procéder (car je vais obtenir des conseils du compilateur à ce sujet séparément si c'est un problème), et xUnit lui-même ne devrait jamais avoir à évaluer l'entrée plus d'une fois (en fait, il obtiendra probablement la même entrée quelle que soit l'extraction de variable, à cause du fonctionnement de l'appel de fonction C #).
Donc, je ne suis pas seulement intéressé à supprimer cet avertissement de ma sortie. Une réponse à ma question explique également pourquoi cet avertissement est inclus dans la bibliothèque en premier lieu et pourquoi toute approche que je devrais utiliser à la place est meilleure.
stuffCollection.Count()
dans une variable distincte et la transmettez à l'assert, cela vous donne-t-il la même erreur?