Dans notre projet, j'ai plusieurs tests JUnit qui, par exemple, prennent chaque fichier d'un répertoire et exécutent un test dessus. Si j'implémente une testEveryFileInDirectory
méthode dans le, TestCase
cela apparaît comme un seul test qui peut échouer ou réussir. Mais je suis intéressé par les résultats sur chaque dossier individuel. Comment puis-je écrire un TestCase
/ TestSuite
tel que chaque fichier apparaisse comme un test séparé, par exemple dans le TestRunner graphique d'Eclipse? (Le codage d'une méthode de test explicite pour chaque fichier n'est pas une option.)
Comparez également la question ParameterizedTest avec un nom dans Eclipse Testrunner .
java
unit-testing
junit
parameterized-unit-test
Hans-Peter Störr
la source
la source
Réponses:
Jetez un œil aux tests paramétrés dans JUnit 4.
En fait, je l'ai fait il y a quelques jours. Je vais essayer d'expliquer ...
Commencez par construire votre classe de test normalement, comme vous le faisiez simplement avec un fichier d'entrée. Décorez votre classe avec:
Construisez un constructeur qui prend l'entrée qui changera à chaque appel de test (dans ce cas, il peut s'agir du fichier lui-même)
Ensuite, créez une méthode statique qui renverra un
Collection
tableau de. Chaque tableau de la collection contiendra les arguments d'entrée pour votre constructeur de classe, par exemple le fichier. Décorez cette méthode avec:Voici un exemple de classe.
Consultez également cet exemple
la source
JUnit 3
JUnit 4
la source
Tests paramétrés Junit 5
Les tests paramétrés JUnit 5 prennent en charge cela en permettant l'utilisation d'une méthode comme source de données :
Tests dynamiques JUnit 5
JUnit 5 prend également en charge cela à travers la notion de a
DynamicTest
, qui doit être généré dans a@TestFactory
, au moyen de la méthode statiquedynamicTest
.Les tests exécutés dans votre IDE (IntelliJ ici) seront affichés comme ceci:
la source
Devrait être possible dans JUnit 3 en héritant
TestSuite
et en remplaçant latests()
méthode pour lister les fichiers et pour chaque retour une instance d'une sous-classe deTestCase
qui prend le nom de fichier comme paramètre de constructeur et a une méthode de test qui teste le fichier donné dans le constructeur.Dans JUnit 4, cela pourrait être encore plus facile.
la source
Vous pourriez envisager d'utiliser la bibliothèque JUnitParams , de sorte que vous disposiez de quelques autres options (plus propres):
Vous pouvez voir plus d' exemples d'utilisation ici .
En plus de JUnitParams, pourquoi écrire des tests paramétrés avec lui est plus facile et plus lisible :
la source
Si TestNG est une option, vous pouvez utiliser des paramètres avec DataProviders .
Le test de chaque fichier individuel verra son résultat affiché dans le rapport textuel ou dans l'interface utilisateur du plugin TestNG d'Eclipse. Le nombre total de tests exécutés comptera chacun de vos fichiers individuellement.
Ce comportement diffère des théories JUnit , dans lesquelles tous les résultats sont regroupés sous une seule entrée "théorie" et ne comptent que pour 1 test. Si vous voulez des rapports de résultats séparés dans JUnit, vous pouvez essayer des tests paramétrés .
Test et entrées
Exemple de sortie
la source
J'ai eu un problème similaire et j'ai fini par écrire un simple runner JUnit 4 qui permet à med de générer dynamiquement des tests.
https://github.com/kimble/junit-test-factory
la source