Question

J'ai essayé d'implémenter des tests unitaires et j'ai actuellement du code qui fait ce qui suit :

  1. requête la base de données externe, le chargement dans une table d'alimentation
  2. Interrogez une vue, qui est un delta de mes tables de flux et de données, mise à jour du tableau de données pour correspondre à la table de flux

ma stratégie de tests unitaires est la suivante :

J'ai une base de données de tests que je suis libre de manipuler.

  1. dans setUP(), chargez des données dans ma base de données de test
  2. exécuter mon code, en utilisant ma base de données de test comme source
  3. inspecter le tableau de données, vérifier les décomptes et l'existence/non-existence de certains enregistrements
  4. effacer la base de données de test, charger dans un ensemble de données différent
  5. exécuter à nouveau le code
  6. inspecter à nouveau la table de données

Évidemment, les ensembles de données que je charge dans la base de données source sont configurés de telle sorte que je sais que certains enregistrements doivent être ajoutés, supprimés, mis à jour, etc.

Il semble que cela soit un peu fastidieux et qu'il devrait y avoir un moyen plus simple ?Aucune suggestion?

Était-ce utile?

La solution

Avez-vous l'intention de tester la vue qui génère les deltas, ou de tester que votre code ajoute, supprime et met à jour correctement en réponse à la vue ?

Si vous souhaitez tester la vue, vous pouvez utiliser un outil tel que UnitéDB pour remplir votre flux et vos tableaux de données avec diverses données dont vous avez calculé manuellement le delta.Ensuite, pour chaque test, vous vérifierez que la vue renvoie un ensemble correspondant.

Si vous souhaitez tester la façon dont votre code répond aux différences détectées par la vue, j'essaierais de supprimer l'accès à la base de données.J'imagine une méthode Java à laquelle vous pouvez transmettre un jeu de résultats (ou une liste de POJO/DTO) et renvoie une liste de tableaux d'objets de paramètres (encore une fois, ou de POJO) à ajouter.D'autres méthodes analyseraient la liste de différences pour rechercher les éléments à supprimer et à mettre à jour.Vous pouvez ensuite créer un jeu de résultats fictifs ou des pojos, les transmettre à votre code et vérifier que les paramètres corrects sont renvoyés.Le tout sans toucher à une base de données.

Je pense que la clé est de diviser votre processus en plusieurs parties et de tester chacune d'elles de la manière la plus indépendante possible.

Autres conseils

Unité de base de données répondra à vos besoins.Une chose à surveiller est qu'ils ont opté pour l'utilisation de SLF4J comme façade de journalisation au lieu de JCL.Vous pouvez configurer SLF4J pour transférer la journalisation vers JCL, mais soyez averti si vous utilisez Maven DbUnit aspire leur fournisseur de journaux Nop par défaut, vous devrez donc utiliser une exclusion, je blogué récemment à propos de ce conflit.

J'utilise DbUnit, mais je travaille aussi très dur pour ne pas avoir à tester par rapport à la base de données.Les tests qui vont à l'encontre de la base de données ne doivent exister que dans le but de tester l'interface de la base de données.J'ai donc des connexions Mock Db qui me permettent de définir les données à utiliser dans tous les autres tests.

Outre le DBUnit déjà suggéré, vous souhaiterez peut-être examiner Unités.Il utilise DBUnit, mais fournit plus que cela (citant le site) :

  • Maintenance automatique des bases de données, avec prise en charge des scripts incrémentaux, reproductibles et post-traitement
  • Désactivez automatiquement les contraintes et définissez les séquences à une valeur minimale
  • Prise en charge d'Oracle, Hsqldb, MySql, DB2, Postgresql, MsSql et Derby
  • Simplifiez la configuration de la connexion à la base de données de test
  • Insertion simple de données de test avec DBUnit * Exécuter des tests dans une transaction
  • Création et injection du gestionnaire de l'entité JPA pour Hibernate, Toplink et * Hibernate Session Création et session
  • Testez automatiquement la cartographie des entités JPA / objets mappés Hibernate avec la base de données

Si vous utilisez Maven, une option consiste à utiliser le plugin-sql-maven.Il vous permet d'exécuter des scripts d'initialisation/remplissage de base de données pendant le cycle de construction de Maven.

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