Comment faire en sorte que les scénarios de test JUnit s'exécutent dans un ordre séquentiel?
Je suis avec JUnit4.
J'ai un ensemble de méthodes d'essai dans un cas de test.
Chaque méthode de test insère des enregistrements et de vérifier un résultat de test et enfin supprimer les enregistrements insérés.
Depuis la JUnit s'exécuter en parallèle, les méthodes d'essai d'échouer à cause de certains
enregistrements présents lors de l'exécution de la précédente méthode de test. Cette
pour arriver seulement à mon collègue de la machine(Windows 7), pas dans ma machine(Cent
OS 6).
Ce dont nous avons besoin, c'est que les méthodes de test à passer dans toutes nos machines.
J'ai essayé de compensation les enregistrements dans la méthode Setup() mais encore une fois il ne fonctionne que sur ma machine. Est-il une option disponible dans JUnit pour rendre les méthodes de test à exécuter dans un uniforme de l'ordre ?
Merci,
source d'informationauteur Athiruban
Vous devez vous connecter pour publier un commentaire.
JUnit 4.11 prend désormais en charge la spécification de l'ordre d'exécution à l'aide de
@FixMethodOrder
annotation.MethodSorters est une nouvelle classe introduite après Junit 4.6 libération. Cette classe déclarée trois types de l'exécution de l'ordre, qui peut être utilisé dans vos cas de test lors de leur exécution.
NAME_ASCENDING(MethodSorters.NAME_ASCENDING) - Trie les méthodes d'essai
par le nom de la méthode, dans l'ordre lexicographique.
JVM(null) - Feuilles les méthodes d'essai de la commande retournée par la
JVM. Notez que l'ordre de la JVM varier d'une exécution.
Par DÉFAUT(MethodSorter.Par DÉFAUT) - Trie les méthodes de test dans un
déterministe, mais pas prévisible, l'ordre.
.
De sortie:
Référence: http://howtodoinjava.com/2012/11/24/ordered-testcases-execution-in-junit-4/
La commande de tests n'est pas garanti dans JUnit.
La raison pour cela est que les tests unitaires sont destinés à être atomique - l'ensemble de l'installation devrait se faire dans le programme d'installation /d'abattre des méthodes, mais pas par d'autres tests.
Envisager de déplacer le code qui insère des données dans une autre classe d'assistance qui peuvent être appelées par le test de l'insertion et de la classe qui a besoin de vérifier, et de l'appel de cette classe dans votre @Avant les méthodes.
Vous devez également envisager un moqueur de solution (par exemple, Mockito), par opposition à frapper, la base de données directement si vous le pouvez - moqueur ira un long chemin afin de vous assurer que vos tests sont agréable et isolé, et, comme un avantage supplémentaire, généralement aider à préciser l'endroit où vous pourrait utiliser un peu de refactoring.
Parce que vous êtes l'exécution de tests en parallèle, et vous frappez la base de données, vous êtes très susceptibles d'avoir des problèmes, parce que la base de données ne sera pas forcément dans un souci de cohérence de l'état pour chaque test.
Solution: ne pas exécuter vos tests en parallèle. JUnit ne pas exécuter les tests en parallèle par défaut, donc soit vous avez de la valeur de l'option dans maven ou en utilisant l'un de l'parallèle coureurs dans JUnit.
Si vous rencontrez toujours des problèmes entre les tests à défaut sur Windows mais pas sur Cent OS, alors il est peut-être un problème avec l'ordre d'exécution, vous aurez besoin de corriger. Voir ma réponse à A JUnit4 commencé à appuyer la commande de test? Est-ce intentionnel?.
Le moyen de contourner cela (au moins dans JUnit) est de supprimer les dépendances entre les tests. Fondamentalement, JUnit ne prend pas en charge la commande et les essais doivent être en mesure d'exécuter dans n'importe quel ordre.
Si vous avez vraiment besoin d'avoir des dépendances entre les tests, l'utilisation TestNG, où vous pouvez avoir des dépendances.
Il n'y a pas de problème à l'exécution de tests en parallèle, même si vous avez votre couche de données. Mais vous avez besoin de travail supplémentaire pour créer des MOCK-UPs pour vos données afin de ne pas il aura atteint pas la base de données. Vous pouvez utiliser différentes maquette cadres comme Mockito, EasyMock et Arquillian.