Envelopper automatiquement les tests unitaires dans une transaction de base de données?

StackOverflow https://stackoverflow.com/questions/407702

  •  03-07-2019
  •  | 
  •  

Question

[Modifier (texte): Dupliquer ]

Je cherche un moyen de boucler automatiquement mes tests d'intégration NUnit dans une transaction de base de données, afin que les modifications apportées par le test soient automatiquement annulées à la fin du test. Idéalement, je décorerais certaines méthodes de test avec un attribut personnalisé qui obligerait NUnit à créer une transaction lorsque le test commence et à l'annuler à la fin du test ... Je peux écrire l'attribut, mais je ne sais pas où ajouter. un chèque pour cela.

La base de test a une taille de 3 Go. Vous ne pouvez donc pas la restaurer au début de chaque test. Je sais que je peux créer manuellement une transaction dans le corps de chaque test, mais je recherche quelque chose de plus élégant.

Peut-être existe-t-il un outil de réécriture IL (un framework AOP, par exemple) qui peut le faire pour moi? Quelqu'un a des suggestions?

Était-ce utile?

La solution

Il y a deux recommandations. La première consiste à utiliser les attributs SetUp et TearDown pour démarrer la transaction et la restaurer à la fin. La documentation pour le faire dans NUnit est ici:

http://www.nunit.org/index.php ? p = configuration & amp; r = 2.4.8

Si vous ne voulez pas utiliser cela, l’autre option que je vois est de la coder dans chaque méthode, mais utilisez une instance de TransactionScope dans une instruction using pour créer la transaction (le fournisseur devrait s’inscrire automatiquement).

Bien entendu, vous pouvez également créer l’instance TransactionScope dans les méthodes SetUp et TearDown.

Autres conseils

Ne rencontrez-vous pas de problèmes avec les transactions imbriquées ici? Si je comprends bien, la plupart des bases de données ne prennent pas en charge les transactions au sein de transactions. Donc, si le code sous test utilise des transactions (je pense que si vous utilisez une base de données prenant en charge les transactions, vous les utiliserez), alors ce que vous voulez vraiment, ce sont des transactions imbriquées, qui (me dit-on) le plus Les bases de données ne supportent pas directement.

Spring.net?

Je viens d'un contexte Java / JUnit, mais je sais qu'en Java, vous pouvez le faire avec Springframework.

(Vous devrez également obtenir votre test auprès de ApplicationContext / BeanFactory pour pouvoir appliquer un AOP à celui-ci.)

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