J'utilise JUnit 4 pour tester une application de base de données. Comme chaque test nécessite un préréglage spécial de la base de données avant son exécution, j'utilise la méthode @Before
pour charger les données en premier et la méthode @After
pour supprimer toutes les données de la base de données. Pour certaines raisons, je ne peux pas utiliser DBUnit, mais je dois utiliser une implémentation Java personnalisée qui fera le travail de chargement et de nettoyage de la base de données. Bien que je puisse créer une instance d'une classe à partir de cette implémentation personnalisée dans la méthode @Before
, il est important que j'obtienne la même instance dans la méthode @After
.Accéder à la même instance d'un objet dans @Before et @After dans un test JUnit4
Ma première idée était d'utiliser un champ (par exemple, myObject
) dans la classe de test et le mettre dans la méthode @Before
, donc je peux l'utiliser dans le nouveau méthode @After
. Cependant, je ne suis pas sûr du cycle de vie de JUnit et de la façon dont il se comportera lorsque les tests s'exécuteront en parallèle, c'est-à-dire si myObject
sera écrasé.
Une autre idée consiste à utiliser un JUnit TestWatcher
qui crée une instance de cet objet dans la méthode starting
et l'enregistre également dans un champ. Ensuite, j'utilise @Rule
dans ma classe de test pour accéder à cette instance via une méthode getter dans l'implémentation TestWatcher
.
Mes questions sont essentiellement:
1) Est-il bon de prérégler la base de données dans la méthode @Before
et supprimer toutes les données dans la méthode @After
? Donc, si le prochain test nécessite seulement une petite quantité de données à charger, il fonctionnera beaucoup plus rapidement.
2) Comment puis-je accéder à la même instance d'un objet dans la méthode @After
qui a été créée dans la méthode @Before
. Il doit être garanti que c'est la même instance, même si les tests se déroulent en parallèle. Est-ce que l'une de mes deux idées est un bon moyen de l'implanter, ce qui est mieux?
Merci!