143 votes

Quelle est la manière idiomatique de vérifier la taille de la collection dans xUnit?

J'ai dans mon test de la suite de test qui va quelque chose comme ceci:

[Fact]
public void VerifySomeStuff()
{
    var stuffCollection = GetSomeStuff();

    Assert.Equal(1, stuffCollection.Count());
}

Ce test fonctionne comme je le pense, mais quand je le lance xUnit imprime un message d'avertissement:

avertissement xUnit2013: N'utilisez pas de faire Valoir.L'égalité() pour vérifier la taille de la collection.

Cependant, aucune alternative n'est suggéré dans l'avertissement, et une recherche sur google me prend le code source dans xUnit pour le test qui vérifie ce message d'avertissement est affiché.

Si Assert.Equal() n'est pas la bonne façon de vérifier la longueur d'une collection, c'est quoi?


Pour clarifier: je me rends compte que je pouvais "truc" xUnit en émettent pas cet avertissement, par exemple l'extraction d'une variable, ou à l'aide de Assert.True(stuff.Count() == 1) à la place. Le dernier est juste hacky, et l'ancien se sent comme si xUnit, par exemple, en essayant d'éviter de multiples itérations de l' IEnumerable<T>, alors ce n'est pas la voie à suivre (parce que je vais obtenir compilateur conseils à ce sujet séparément, si c'est un problème), et xUnit lui-même ne devriez jamais avoir à évaluer la saisie de plus d'une fois (en fait, il sera probablement obtenir le même signal d'entrée, quelle que soit la variable d'extraction, car de la façon dont C# appel de fonction œuvres).

Donc, je ne suis pas seulement intéressé par la suppression de cet avertissement de mon résultat. Une réponse à ma question explique aussi pourquoi cet avertissement est inclus dans la bibliothèque, en premier lieu, et pourquoi, quelle que soit l'approche que je devrais utiliser à la place, c'est mieux.

162voto

vcsjones Points 51910

Xunit offre des solutions rapides pour la plupart de ses mises en garde, de sorte que vous devriez être en mesure de voir ce qu'il pense être "de droite".

xunit

Dans votre cas, il veut que vous utilisez Assert.Single depuis que vous attendez d'un élément. Si vous étiez à faire valoir un nombre arbitraire, comme 412, alors il ne serait pas vous donner un avertissement au sujet de l'utilisation de Count. Il ne vous suggérons d'utiliser Single si vous vous attendez à un seul élément, ou Empty si vous vous attendez à aucun élément.

2voto

devjc Points 1

J'ai trouvé cela me donne la même erreur:

 Assert.Equal(2, vm.Errors.Count());
 

Et le lancer a arrêté l’erreur d’apparaître.

 Assert.Equal(2, (int)vm.Errors.Count());
 

1voto

Bhuwan Maharjan Points 146

J'ai eu le même problème lorsque j'ai utilisé la propriété Count comme ci-dessous dans xUnit.

entrez la description de l'image ici

Après, j'utilise la fonction Count () sur la collection, cela corrige mon problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X