Comment affirmer une valeur réelle contre 2 valeurs attendues ou plus?
Je me suis mise à l'essai d'une méthode pour voir si elle renvoie la chaîne correcte. Cette chaîne est constituée d'un grand nombre de lignes dont l'ordre peut changer, ce qui donne habituellement 2 combinaisons possibles. Cet ordre n'est pas important pour mon application.
Cependant, parce que l'ordre des lignes peut changer, l'écriture d'une instruction Assert ne fonctionnera pas, car parfois, il va passer le test, et parfois il va échouer le test.
Donc, est-il possible d'écrire un test qui permettra d'affirmer une réelle chaîne de valeur contre 2 ou plus attendus de la chaîne de valeurs et de voir si elle est égale à l'un d'eux?
source d'informationauteur Andrei
Vous devez vous connecter pour publier un commentaire.
À l'aide de la Hamcrest
CoreMatcher
(inclus dans JUnit 4.4 ou version ultérieure) etassertThat()
:Je voudrais utiliser AssertJ pour cela:
C'est plus concis et il vous donnera un message descriptif lorsque l'assertion échoue.
Vous pouvez utiliser Hamcrest pour cela:
(Je vois Joachim juste répondu de façon très similaire (+1)... je vais ajouter ce que un autre exemple.)
Envisager la rédaction d'un personnalisé hamcrest matcher retournée par une méthode, dans ce cas
containsOneOf
c'est à dire:En accord avec la "xUnit modèles de" il faut éviter la logique conditionnelle dans votre correspondance, une boucle avec une instruction break devrait suffire.
Ont un coup d'oeil à Hamcrest et xUnit Modèles pour plus d'informations.
J'ai lu toutes les réponses, mais celui qui semble le plus compact et expressif pour moi, c'est à l'aide de Hamcrest de
isOneOf
qui est déjà inclus dans JUnitqui vous donne un joli message d'erreur en cas d'échec.
Si votre utilisation de junit je venais de faire quelque chose comme ce qui suit:
Si le contenu d'une ligne fixe, vous pouvez le diviser en fin de ligne, avant de les comparer. Ensuite, il suffit de comparer chaque ligne à un ensemble de valeurs attendues.
Quelque chose comme ceci:
Si vous voulez vérifier que toutes les valeurs attendues sont présentes, vous pouvez faire valoir que
expectedValue.remove(str) == true
et affirmer après la boucle que l'Ensemble est vide. Si certaines lignes peuvent se produire plusieurs fois, vous devez utiliser un Sac au lieu d'un Jeu.Le plus simple/le plus efficace peut être
Ce sera effectivement pas de frais généraux lorsque vous n'avez pas les assertions sous tension.
Je suis l'aide de la suite, j'espère que cela aiderait:
En supposant que la méthode de test renvoie un tableau, vous pouvez le tester à l'aide de Hamcrest de arrayContainingInAnyOrder.
Remarque: l'utilisation de
is
wrapper est purement facultatif, utilisé seulement comme la lisibilité de sucre.Je suis en utilisant suivantes: