2015-07-24 1 views
0

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!

Répondre

3
  1. À mon humble avis, no. La bonne pratique, que je recommande lors de l'utilisation de DbSetup (voir http://dbsetup.ninja-squad.com/user-guide.html#dont-cleanup-prepare pour une explication plus détaillée), est d'effacer la base de données et d'insérer les données nécessaires avant le test, et ne rien faire après le test. De cette façon, vous êtes sûr que la base de données contient exactement ce que vous voulez au démarrage d'un test (même si le précédent n'a pas pu être nettoyé) et vous pouvez inspecter la base de données après un test échoué afin de diagnostiquer les problèmes.

  2. Utilisez un champ. JUnit crée une nouvelle instance de la classe de test par test.