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?Réponses:
Xunit propose des correctifs rapides pour la plupart de ses avertissements, vous devriez donc être en mesure de voir ce qu'il pense être «juste».
Dans votre cas, il veut que vous l'utilisiez
Assert.Single
puisque vous attendez exactement un article. Si vous affirmiez un nombre arbitraire, comme 412, cela ne vous avertirait pas de l'utilisationCount
. Il ne suggérera de l'utiliser queSingle
si vous attendez un article ouEmpty
si vous n'attendez aucun article.la source
Empty
,Single
etNotEmpty
- si vous attendez une valeur dynamique, xUnit2013 ne devrait pas se déclencher.J'ai trouvé que cela me donne la même erreur:
Et le lancer a empêché l'erreur d'apparaître.
la source
Pour un élément unique dans une liste, il est préférable d'utiliser ceci à la place:
Assert.Single(resultList);
la source
J'ai eu le même problème lorsque j'ai utilisé la propriété Count comme ci-dessous dans xUnit.
Après, j'utilise la fonction Count () sur la collection, cela a résolu mon problème.
la source