2010-11-12 3 views
1

Existe-t-il des moyens de supprimer les lignes insérées par un test élémentaire dans un test unitaire?Suppression de lignes de test avec une clé d'incrémentation automatique dans un test unitaire

Habituellement, si la clé est une clé auto-incrémentée, je dois stocker l'ID des lignes où le cas de test a été inséré afin que je puisse les supprimer pendant la phase de démontage.

Cependant, parfois, le scénario de test plante ou déclenche une erreur inattendue lorsque la phase d'effacement n'a pas lieu (dans mon cas, c'est l'erreur d'exception fatale de PHP). J'ai un problème pour supprimer ces lignes nouvellement créées dans de tels cas.

J'ai considéré attribuer un morceau d'ID pour les tests, disons 1 à 100; mais comme le code insérant les lignes utilise une clé d'incrémentation automatique, je ne peux pas forcer le code à utiliser les ID réservés pour le test.

Y a-t-il un moyen de "tagger" une ligne en tant que "test" afin de pouvoir la nettoyer facilement en dehors d'un cas de test en cas de panne?

J'utilise PHP, MySQL et SimpleTest

+1

Si vous connaissez les valeurs des données de test que vous insérez (et ce n'est pas la même chose que les données que vous ne souhaitez pas supprimer), vous pouvez simplement supprimer = ; ' –

Répondre

0

La pratique courante consiste à utiliser specil base de données vide juste pour les tests. Puis dans setUp() vous remplissez vos tables avec des données de test, et dans tearDown() vous nettoyez tout. Pour être plus précis: supprimez une méthode cleanDatabase() et invoquez-la à 2 endroits, en configuration et en démontage.

+0

Ma question a déclaré que je suis la pratique standard. C'est quand le cas de test se bloque et que tearDown() ne s'exécute pas, et que je ne peux pas stocker l'ID de la ligne nouvellement insérée. Si j'utilise une base de données de test, cela signifie que je ne peux pas exécuter les tests unitaires sur une application en ligne pour la validation et le dépannage. – Extrakun

+0

@Extrakun: la pratique standard est lorsque ** les tests unitaires ** fonctionnent avec une base de données de test vierge. – zerkms

+0

Merci d'avoir corrigé mon idée fausse. J'ai fait un peu de lecture pour vérifier ce que tu as dit et il semble que tu as raison. Cependant, je ne peux pas voter votre réponse avant de la modifier. Je vais l'accepter comme ça. – Extrakun

0

Avez-vous des questions sur l'utilisation des transactions? Enquêter sur TransactionScope. Il est très utile d'annuler les transactions dans les tests unitaires.

Questions connexes