Question

Qu'est-ce que vous utilisez pour écrire des tests pilotés par les données dans jUnit?

(Ma définition de) un test piloté par les données est un test qui lit les données d'une source externe (fichier, base de données, ...), exécute un test par ligne / fichier / quel que soit et affiche les résultats dans un test. le coureur comme si vous aviez des tests séparés - le résultat de chaque exécution est affiché séparément, pas dans un énorme agrégat.

Était-ce utile?

La solution

Dans JUnit4, vous pouvez utiliser le paramétré testrunner pour gérer les données. tests.

Ce n’est pas très bien documenté, mais l’idée de base est de créer une méthode statique (annotée avec @Parameters ) qui renvoie une matrice de tableaux d’objets. Chacun de ces tableaux est utilisé comme argument du constructeur de la classe de test, puis les méthodes de test habituelles peuvent être exécutées à l'aide de champs définis dans le constructeur.

Vous pouvez écrire du code pour lire et analyser un fichier texte externe dans la méthode @Parameters (ou obtenir des données d'une autre source externe), puis vous pourrez ajouter de nouveaux tests en modifiant ce fichier sans recompiler les tests.

Autres conseils

C’est là que TestNG, avec son @DataSource, brille. C'est une des raisons pour lesquelles je le préfère à JUnit; les autres sont des dépendances et des tests en parallèle.

J'utilise une base de données en mémoire telle que hsqldb pour pouvoir pré-renseigner la base de données avec un " ; style de production " ensemble de données ou je peux commencer avec une base de données hsqldb vide et la remplir avec les lignes dont j'ai besoin pour effectuer mes tests. En outre, je rédigerai mes tests avec JUnit et Mockito .

J'utilise une combinaison de dbUnit , jMock et jUnit 4. Vous pouvez ensuite l'exécuter en tant que suite ou séparément

Il est préférable d’étendre TestCase avec un "DataDrivenTestCase". cela convient à vos besoins. Voici un exemple de travail: http://mrlalonde.blogspot.ca/2012/08 /data-driven-tests-with-junit.html

Contrairement aux tests paramétrés, il permet de nommer des cas de test bien nommés.

Je suis avec @ DroidIn.net, c’est exactement ce que je fais, mais pour répondre littéralement à votre question, "et affiche les résultats dans un programme de test comme si vous aviez des tests séparés". vous devez regarder le coureur paramétré JUnit4. DBUnit ne fait pas ça. Si vous devez faire beaucoup de choses là-dessus, honnêtement, TestNG est plus flexible, mais vous pouvez absolument le faire dans JUnit.

Vous pouvez également consulter le programme d'exécution de JUnit Theories, mais je me souviens qu'il n'est pas idéal pour les ensembles de données pilotés par les données, ce qui est logique car JUnit ne consiste pas à travailler avec de grandes quantités de données externes.

Même s’il s’agit d’un sujet assez ancien, j’ai quand même pensé à apporter ma contribution. Je pense que le support de JUnit pour les tests basés sur les données est inférieur et trop hostile. pour par exemple. pour utiliser paramétré, nous devons écrire notre constructeur. Avec Theories runner, nous n’avons aucun contrôle sur l’ensemble des données de test transmises à la méthode de test.

La série de publications sur le blog présente plusieurs inconvénients: http://www.kumaranuj.com/2012/08/junits-parameterized-runner-and-data.html

Il existe maintenant une solution complète qui se présente sous la forme d’EasyTest, un framework étendu de JUnit et destiné à fournir de nombreuses fonctionnalités à ses utilisateurs. Son objectif principal est d'effectuer des tests pilotés par les données à l'aide de JUnit, bien qu'il ne soit plus nécessaire de dépendre réellement de JUnit. Voici le projet github pour refernece: https://github.com/anujgandharv/easytest

Si quelqu'un est intéressé à donner son opinion, son code ou ses suggestions, c'est le moment. Vous pouvez simplement aller dans le dépôt github et créer des problèmes.

Généralement, les tests basés sur les données utilisent un petit composant testable pour gérer les données. (Objet de lecture de fichier ou objets fictifs) Pour les bases de données et les ressources en dehors de l'application, les fesses sont utilisées pour simuler d'autres systèmes. (Services Web, bases de données, etc.). Je vois généralement qu'il existe des fichiers de données externes qui gèrent les données et la sortie. De cette façon, le fichier de données peut être ajouté au VCS.

Nous avons actuellement un fichier d'accessoires avec nos numéros d'identification. C'est horriblement fragile, mais il est facile d'obtenir quelque chose. Notre plan est d’avoir initialement ces numéros d’identification remplaçables par les propriétés -D dans nos générations de fourmis.

Notre environnement utilise une base de données héritée avec des données extrêmement entremêlées qui ne peuvent pas être chargées avant une exécution (par exemple, par dbUnit). Nous souhaiterions éventuellement arriver à un test unitaire qui interrogerait la base de données pour rechercher un ID avec la propriété testée, puis utiliser cet ID dans le test unitaire. Elle serait lente et s'appellerait plutôt un test d'intégration, pas un "test unitaire", mais nous le testerions avec des données réelles pour éviter que notre application fonctionne parfaitement avec des données de test mais échoue avec des données réelles.

Certains tests se prêtent facilement à l'interface.

Si les lectures de base de données / fichier sont récupérées par un appel d'interface, il vous suffit simplement de faire en sorte que votre test unitaire implémente l'interface et que la classe de test unitaire puisse renvoyer les données de votre choix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top