Je suis confronté à faire le test unitaire sur la couche d'accès aux données, toute la base de données d'appel de couche d'accès aux données via la procédure de stockage. Je prévois de créer une base de données propre utilisée pour les tests unitaires, mais j'ai trouvé que la plupart des procédures de stockage appelaient l'autre base de données, je ne sais pas comment tester ce type de procédure de stockage. ? ou d'autres solutions?Comment effectuer un test unitaire sur la procédure de magasin à distance
Répondre
En général, plus vous pouvez abstraire votre couche d'accès aux données du reste de l'application, mieux vous pouvez la tester unitaire. Comme l'a écrit Jayden dans une autre réponse, Test Doubles tels que les simulacres dynamiques sont une bonne solution. Cependant, si j'ai bien compris votre question, vous voulez explicitement tester la couche d'accès aux données, et c'est également correct. Dans ce cas, les simulacres dynamiques ne vont pas vous aider, car vous testerez la couche la plus basse de votre application - il n'y a plus rien à faire. Certaines personnes insistent sur le fait qu'il ne s'agit pas d'un test mais plutôt d'un test d'intégration , mais je pense que la partie importante est de savoir si le test est automatisé ou non, et non ce que nous appelons. Dans tous les cas, une fois que vous avez commencé à tester la couche d'accès aux données, vous avez plus ou moins à traiter avec elle comme elle est. S'il utilise des procédures stockées à distance, vous devrez également gérer cela. Pour simplifier la configuration, vous pouvez placer la base de données 'remote' dans la même boîte que la base de données 'locale'.
Un test unitaire est principalement un test comportemental, ce qui serait correct. Il devrait y avoir d'autres types de tests (tests d'intégration ou tests système) qui utilisent une configuration réaliste avec de nombreuses machines distribuées, etc. pour vérifier que la sécurité, la mise en réseau etc. fonctionne comme prévu, mais cela ne devrait pas être l'objectif principal d'un test unitaire.
Regardez dans le mockage d'objet. Rhino mocks est une solution à ce problème, vous pouvez commencer à regarder here . Mocking vous permettra de simuler l'accès aux données à partir de votre base de données sans avoir à mettre en place une base de données 'test'. Il y a un peu de travail impliqué dans la mise en place des simulacres, mais cela maintient vos tests cohérents.
Vous pouvez envisager de structurer votre base de données en faisant référence à l'autre, de sorte que toutes les tables distantes accèdent via des vues. Je suis normalement une convention de dénomination de:
vw_[DATABASENAME]_[TABLENAME]
La vue se compose de rien d'autre que:
select * from server.dbo.tablename
Toutes les procédures stockées accès tables à distance via les points de vue, plutôt que directement par exemple pour accéder à une table Personne Le personnel d'appel de base de données distante serait:
create view vw_STAFF_Person
as
select * from Staff.dbo.Person
go
create procedure stp_Select_Staff
as
select * from vw_Staff_Person
go
plutôt que
create procedure stp_Select_Staff
as
select * from Staff.dbo.Person
go
La raison pour cela est que lorsque vous voulez tester votre base de données, vous voudrez probablement relier toutes les bases de données distantes à vos bases de données distantes 'test'. Cela est généralement plus facile à faire lorsque les seuls objets qui accèdent à des données distantes sont des vues simples, plutôt que des procédures stockées souvent plus nombreuses et complexes.
J'ai généralement un travail de configuration qui peut rescrire les vues aux bases de données 'test', donc c'est fait automatiquement. En plus de cela, j'ai souvent un travail de configuration qui restaure les sauvegardes de base de données de production dans l'environnement 'test' afin que les tests avant le déploiement puissent être effectués sur des systèmes qui contiennent une copie de données en direct. Encore une fois ce processus est rendu plus facile avec seulement avoir à relier les vues, plutôt que toutes les références proc stockées aux systèmes distants.
Afin de rendre les tests contre la sécurité plus facile, j'ai aussi toujours mis la sécurité de base de données au niveau de la base de données roles
, plutôt que des utilisateurs spécifiques, que je trouve roles
plus portable dans des environnements de production, de test et de développement que users
.
Espérons que certains de ces conseils aident.
- 1. Comment effectuer un test unitaire pour une application Web?
- 2. appels de procédure à distance
- 3. Fonctions de test unitaire reposant sur MouseEventArgs?
- 4. Servlets de test unitaire
- 5. Test unitaire avec un fichier d'entrée
- 6. Comment puis-je écrire un test unitaire pour l'événement Gridview_RowCommand?
- 7. Test unitaire: Maven ou Eclipse?
- 8. test unitaire sur le fichier de téléchargement xls
- 9. Comment déboguer la procédure stockée sur un serveur SQL distant à partir de Visual Studio 2005
- 10. Comment passer l'objet FormCollection pour testmethod pendant le test unitaire
- 11. Obtention d'arguments de ligne de commande dans un test unitaire
- 12. Comment effectuer un test de succès rectangulaire en PHP
- 13. .NET WebTest Custom ValidationRules - Comment faire un test unitaire?
- 14. constructeur de test unitaire qui utilise My.Settings
- 15. Outil de test unitaire pour la base de données Sybase
- 16. Test de code unitaire qui appelle VirtualPathUtility.ToAbsolute
- 17. Dossier caché copié pendant le test unitaire exécuté sur VS2008
- 18. Optimisation de la distance des points au test de sphère
- 19. Comment exécuter un test unitaire sur une méthode dans un projet ASP.NET classique à l'aide de VS2008?
- 20. Mocking l'instanciation d'un objet pour un test unitaire
- 21. Test des procédures stockées CLR SQL avec le projet de test unitaire
- 22. GWT Test unitaire TDD et outillage
- 23. Création d'un objet System.Web.Caching.Cache dans un test unitaire
- 24. Spring - Ignorer la méthode init en test unitaire
- 25. Création d'un processus séparé à partir d'un test unitaire
- 26. Comment effectuer un défi NTLM sur l'iPhone
- 27. comment effectuer une sauvegarde sur un partage réseau?
- 28. Comment effectuer un transfert groupé sur s3?
- 29. Comment puis-je utiliser un fichier de données dans un test unitaire VS 2008?
- 30. Meilleur cadre de test unitaire pour l'ancienne école QNX?
+1 pour annuler le -1 quelqu'un a donné cette réponse sans laisser de commentaire. Jayden a raison (bien que j'utilise Moq) :) - si vous utilisez une base de données, vous ne faites pas de tests ** unit ** purs. Vous voudrez peut-être effectuer des tests ** d'intégration ** sur le DAL, et c'est OK. Pour votre base de données de test, remplacez simplement le sproc réel par un sproc stub qui renvoie des données statiques. – TrueWill