2010-02-09 4 views
2

J'utilise DbUnit avec Unitils, ce qui fonctionne très bien la plupart du temps.DbUnit: problème avec la génération de l'incrément

Aujourd'hui, j'ai trouvé un problème étrange.

Situation est:

  • -je utiliser Hibernate, et ont id avec le générateur "incrément":
 
<id name="Id"> 
    <generator class="increment"/> 
</id> 
  • Je prépare ensemble de données de test, où id maximale est 5.
  • J'utilise une stratégie de chargement clean-insert.
  • J'ai deux méthodes de test test1 et test2, chacune ajoutant une ligne dans cette table.
  • Après la méthode test1, la ligne nouvellement ajoutée a id = 6.
  • Après la méthode test2, la ligne nouvellement créée a id = 7.

Tout est OK et je comprends pourquoi c'est comme ça. C'est un problème du point de vue de la maintenance. Si jamais j'ajoute la troisième méthode de test entre les deux, la méthode test2 échouera soudainement même si rien n'a changé, juste parce que row aura un ID différent.

Existe-t-il de toute façon que je puisse forcer DbUnit ou Hibernate à calculer la prochaine valeur d'id avant chaque méthode de test?

Répondre

3

La première chose, vous devez fournir l'ensemble de données complet, oui avec id ainsi. Si non, ne pas tester ou baser votre test sur ids. Pourquoi ne pas tester? parce que c'est déjà bien testé et fiable. Rappelez-vous toujours de ne jamais tester les bibliothèques tierces, la plupart déjà bien testées. Mais il semble tout à fait impossible de ne pas dépendre de id s. Je suis d'accord, vous devriez écrire une classe fictive pour aborder ce problème pour vous, ou peut-être vous pouvez fournir une méthode de setter pour écraser la valeur générée par le vôtre.

La deuxième option consiste toujours à démarrer votre scénario de test avec une table vide. Vous pouvez écrire un appareil pour nettoyer la table pour vous, avant chaque test.

+0

correctement dit aussi bien – Bozho

+0

Le nettoyage de la table n'est normalement pas suffisant; Vous devrez peut-être également réinitialiser la séquence d'ID de la table. – pimlottc

3

La solution est de ne pas compter sur ids générés:

  • ils sont en dehors du contrôle de votre test.
  • si vous les faites contrôlés par le test, vous n'êtes plus tester la classe sous test
+0

A juste titre. +1 –

+0

Comment est-ce que je peux faire ceci? Existe-t-il un moyen d'ignorer les colonnes clés d'une manière ou d'une autre? –

+0

Je ne sais pas, je n'ai aucune information sur votre classe de test et classe-sous-test – Bozho

Questions connexes