Comment réutiliser les tests JUnit dans une autre classe de test?
comment puis-je réutiliser JUnit tests dans un autre testclass?
Par exemple:
public TestClass1 {
@Test
public void testSomething(){...}
}
public TestClass2 {
@Test
public void testSomethingAndSomethingElse() {
//Somehow execute testSomething()
//and then test something else
}
}
- Les tests unitaires doivent être indépendants et isolés. Faire un test dépend d'un autre est une mauvaise idée.
- cas d'utilisation: votre app/framework prend en charge plusieurs bases de données. si vous avez une base de test de la classe qui contient des tests pour toutes les fonctionnalités et une prolongation par la base de données qui crée la connexion, les charges initial DDL/données, etc.
- Ses une mauvaise idée et d'être parfois mauvaise, c'est bon 🙂
Vous devez vous connecter pour publier un commentaire.
Comme d'habitude, vous pouvez:
TestClass2
deTestClass1
TestClass1
deTestClass2
à l'aide de la délégation:Exemple 1:
Exemple 2:
Éviter le scénario, en général. Il est sujet à faire des tests beaucoup plus fragile. Si
TestClass1
échoue, alorsTestClass2
implicitement échoue, ce qui n'est pas souhaitable pour au moins les raisons suivantes:Parfois de partage de sections de code de test est utile, en particulier pour les tests d'intégration. Voici comment vous pourriez le faire, sans, selon les tests eux-mêmes:
Sinon, vous pouvez utiliser une classe d'assistance et d'éviter l'héritage tout à fait. S'affirme et qui peuvent aller dans le
somethingHelper()
méthode.Ne pas appeler une méthode de
TestClass1
dansTestClass2
directement. Le cas de test deviennent moins lisibles de cette façon, et peut conduire à spaghetti frittata.Ce qui est commun à l'exécution d'un test avec une configuration différente. Ne vous inquiétez pas à ce sujet et aller de l'avant.
À la première étape, créez votre propre test sans tenir compte de la configuration:
Ensuite, étendre la classe de test et ajouter un peu de configuration:
Il n'est pas nécessaire de faire la configuration spécifique mais il est très fréquent, avec un système configurable (la principale fonctionnalité du système doit être valide pour chaque config).
Dans les autres cas de test:
Par exemple, il peut être un chiffrement et le déchiffrement processus où la séquence de chiffrement>le déchiffrement doit être identifié. D'autre part, il existe un autre algorithme à utiliser pendant le processus de test est unique.
Logiquement, il n'y a pas de raison d'appeler une méthode de test à partir d'un autre. Tout outil qui exécute un test juste comme facilement tous les tests dans le package. Mais si vous en avez besoin, vous souhaitez appeler comme toute autre méthode dans une autre classe.
Ce que vous avez probablement envie de faire, est de procéder à certaines communes pour les deux méthodes d'essai. Vous pourriez mettre
that
code dans une méthode utilitaire dans une classe commune, et d'invoquer le code commun dans les deux tests.getConnection()
méthode et tout le reste est héréditaire. Si une fonctionnalité n'est pas le support pour une certaine base de données, vous pouvez facilement l'exclure en la remplaçant.