JUNIT: exécutez l'installation une seule fois pour un grand nombre de classes de test
J'ai une classe, que j'utilise comme base pour mes tests unitaires. Dans cette classe j'initialise l'ensemble de l'environnement pour mes tests, configuration des mappages de base de données, entrez un nombre d'enregistrements de base de données dans plusieurs tables, etc. Cette classe a une méthode avec un @BeforeClass annotation qui ne l'initialisation. Autre chose, j'étends la classe avec des classes spécifiques dans lesquels j'ai l' @méthodes d'Essai.
Ma question est, depuis l'avant de la classe est exactement la même pour toutes ces classes de test, comment puis-je m'assurer qu'ils sont exécutés qu'une seule fois pour tous les tests.
Une solution simple est que je pourrais garder tous les tests d'une classe. Cependant, le nombre de tests est énorme, ils sont aussi classés selon sur les chefs fonctionnels. Donc, ils sont situés dans les différentes classes. Mais depuis, ils ont besoin exactement la même configuration, ils héritent de la @BeforeClass. En conséquence, l'ensemble de l'installation est faite au moins une fois par classe de test, en prenant beaucoup plus de temps au total que je préfère.
J'ai pu, cependant, de les mettre tous dans divers modules sous un seul paquet, donc si il existe un moyen, comment je peux courir fixé une fois pour tous les tests dans ce package, il serait grand.
source d'informationauteur neoInfinite
Vous devez vous connecter pour publier un commentaire.
Avec JUnit4 suite de tests que vous pouvez faire quelque chose comme ceci :
Ensuite, vous exécutez cette classe comme si vous exécutez un test normal de la classe et il va exécuter toutes vos tests.
JUnit ne supporte pas cela, vous devrez utiliser le Java standard des solutions de rechange pour les singletons: Déplacer la commune de code de configuration en static bloc de code, puis d'appeler une méthode vide dans cette classe:
Assurez-vous que tous les tests appel
init()
par exemple, mon de le mettre dans un@BeforeClass
méthode. Ou mettre le code statique bloc dans une base commune de classe.Vous pouvez également utiliser une variable globale:
Créer une classe de base pour tous les tests:
et chaque essai doit hériter de:
Si vous pouvez tolérer l'ajout de printemps-test à votre projet, ou que vous l'utilisez déjà, puis une bonne approche consiste à utiliser la technique décrite ici: Comment charger DBUnit des données de test une fois par cas avec le Printemps de Test
Ne sais pas si quelqu'un est encore en utilisant JUnit et cherche à résoudre sans l'aide de Printemps Runner (aka pas de printemps de l'intégration). TestNG dispose de cette fonctionnalité. Mais ici, c'est un JUnit en fonction de la solution.
Créer un RunOnce par thread opération comme si. Cela maintient une liste de classes pour lesquelles l'opération a été exécutée.
De retour dans votre unité de test
Lorsque vous utilisez cette manière, vous pouvez effectuer des opérations une fois par classe à l'aide de ThreadLocal.
Vous pouvez faire un
BaseTest
classe avec un@BeforeClass
méthode, puis tous les autres tests hériter d'elle. De cette façon, lors de chaque test de l'objet est construit,@BeforeClass
est exécuté.Également d'éviter l'exécution de juste une fois pour toutes à la suite de tests, puisque tous les cas de test doivent être indépendants.
@BeforeClass
doit exécuter qu'une seule fois chaque cas de test, pas de suite de tests.