web-dev-qa-db-fra.com

JUnit exécute-t-il les cas de test de manière séquentielle?

Dans ce post , j'ai posé une petite question dans le cadre d'un problème plus important. Comme je n'ai pas encore reçu de réponses, j'ai posé ma question ici:

Est-il raisonnable de supposer que JUnit exécute les cas de test séquentiellement: un cas de test se termine avant que le suivant ne commence. Est-ce que cela diffère entre les versions de JUnit (ma priorité est sur JUnit4)? Et sinon, existe-t-il un moyen simple de forcer JUnit à exécuter les tests de manière séquentielle?

Je vous remercie

38
H-H

Oui, par défaut, je pense qu'il exécute les tests de manière séquentielle.

JUnit 4.6 a introduit un ParallelRunner expérimental pour exécuter des tests en parallèle - je ne connais pas son état actuel. Je m'attendrais à ce que le parallélisme reste une fonctionnalité "opt-in" par défaut. (À en juger par d'autres réponses, il semble que cela soit maintenant là pour rester mais sous une forme légèrement différente - et toujours opt-in.)

28
Jon Skeet

L'exécution parallèle des tests est prise en charge depuis JUnit 4.7. Mais pour autant que je sache, cela ne se fait jamais automatiquement, vous devez spécifiquement le configurer, par ex. comme ici: http://Java.dzone.com/articles/running-junit-tests-parallel

Mais n'oubliez pas que:

Les bons tests automatisés doivent être indépendants, isolés et reproductibles, ce qui en fait des candidats idéaux pour être exécutés simultanément.

Je ne sais pas pourquoi vous demandez, mais si les critères ci-dessus ne sont pas remplis, vous voudrez peut-être réfléchir à la conception de votre test.

17
mort

Une supposition forte et raisonnable: oui, JUnit est un thread unique par défaut.

Sinon, on ne saurait pas si un test a échoué parce que le code est cassé ou s'il a échoué en raison de problèmes de concurrence si certains tests s'exécutaient en parallèle.

5
Andreas_D

Oui,

Et pensez aussi au @before et @after là, vous pouvez avoir du code qui restaure l'état pour le prochain test à exécuter.

3
Farmor

Oui. Comme mentionné quelque part dans les commentaires, vous devez planifier soigneusement la configuration et le démontage du testcase (toutes les superclasses affectent ces actions), ainsi que la configuration et le démontage de la suite de tests.

Aussi, sur une note secondaire, pour autant que je me souvienne, JUnit ne garantit pas l'ordre d'exécution des cas de test (c'est-à-dire, sauf s'ils sont dans une suite, je suppose). Ceci est important et devrait vous pousser à effectuer un nettoyage très précis et une restauration de l'état SUT entre les tests, et éviter les cas de test reposant sur les résultats d'autres cas de test. on pourrait dire que c'est une sorte d'antipattern :).

1
Adam