13
octobre
2009
[Tests unitaires][C#] Comment tester sa couche d’accès aux données (DAL) ?
octobre
2009
Un article de nico-pyright(c)
1 Commentaire
Tester sa couche d’accès aux données (DAL) est toujours un calvaire pour le développeur. La principale raison réside dans la nature même d’une base de données et dans sa fonction de persistance d’état.
Or, un test doit pouvoir se baser sur un contexte connu et le fait de tester des opérations CRUD sur sa base de données va forcément modifier ce contexte. On en déduit deux axes principaux :
- Avoir un contexte connu => i.e. avoir des valeurs dans la base de données
- Ne pas modifier le contexte => i.e. restaurer l’état de la base comme au début du test
Quelles sont les différentes pistes que nous pouvons explorer pour résoudre ce problème ?
- Ajouter, supprimer manuellement les données qui ont pu être supprimées, ajoutées à chaque test. Cela nécessite d’exécuter du sql en vrac à chaque test et peut être un travail laborieux et décourager le développeur quand les données sont nombreuses.
- Restaurer un dump de la base de données de test après chaque exécution du test. Cela est très problématique si la base de données est volumineuse.
- Avoir un moyen de mettre une base de données de test dans un certain état à chaque début de test, comme expliqué dans cet article : Unit Testing the Data Access Layer, par Tim Stall ou dans celui-ci : Get Test Infected with NUnit: Unit Test Your .NET Data Access Layer, par Steven A. Smith. Cela nécessite un gros travail pour mettre sa base en état (construction de script sql pour vider la base, construire la structure, ajouter les données, etc …) et un temps non négligeable d’exécution à chaque test. Cela peut aussi être gênant lorsqu’on travaille à plusieurs sur la même base de test.
- Avoir une base de données de test et exécuter chaque opération CRUD dans une transaction (par exemple la classe SqlTransaction), comme on peut le retrouver dans le livre Test-Driven Development in Microsoft .Net de James Newkirk et Alexei A. Vorontsov) qui sera ensuite annulée. Cela nécessite de rajouter du code spécifique dans nos tests pour créer et annuler la transaction.
- Utiliser COM+ entreprise services (ou COM+ 1.5) et utiliser une classe de base pour ses tests qui encapsule la création et l’annulation de la transaction, comme décrit dans l’article Simplify Data Layer Unit Testing using Enterprise Services de Roy Osherove. Cela nécessite d’avoir un provider ADO.NET qui supporte les transactions distribuées, ce qui est quand même le cas de bon nombre d’entre eux et nécessite d’exécuter que des commandes sql qui peuvent être utilisées dans une transaction distribuée.
- Des frameworks de test (MbUnit, XtUnit, NunitX) semblent utiliser des attributs à poser sur ses tests pour effectuer la restauration des données altérées)
Et vous, comment testez-vous vos DAL ?
1 Commentaire + Ajouter un commentaire
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007
Salut, moi je test avec des transactions (TransactionScope) voici le détail :
http://blog.developpez.com/dotnetstation/p9019/divers/test-unitaire-et-couche-d-acces/