Lorsque vous effectuez des tests d'intégration avec uniquement votre couche d'accès aux données ou la majorité de la pile d'applications. Quel est le meilleur moyen d'éviter que plusieurs tests s'affrontent s'ils sont exécutés sur la même base de données?Tests d'intégration de base de données
Répondre
Transactions.
Qu'est-ce que le rubis sur des rails cadre de test unitaire n'est la suivante:
Load all fixture data.
For each test:
BEGIN TRANSACTION
# Yield control to user code
ROLLBACK TRANSACTION
End for each
Cela signifie que
- Toute modification de votre test fait à la base de données ne sera pas affecter d'autres sujets alors qu'il est in- progress
- Les données du test suivant ne sont pas polluées par des tests antérieurs
- Cela représente environ un zillion de fois plus rapide que le rechargement manuel des données pour chaque test.
I pour penser cela est assez cool
Pour les applications de base de données simples, je trouve l'utilisation SQLite inestimable. Il vous permet d'avoir une base de données unique et autonome pour chaque test. Toutefois, cela ne fonctionne que si vous utilisez une fonctionnalité SQL générique simple ou si vous pouvez facilement masquer les légères différences entre SQLite et votre système de base de données de production derrière une classe, mais j'ai toujours trouvé cela assez facile dans le SQL. applications que j'ai développées.
Je voulais accepter les réponses est à la fois libre gnous et Orion Edwards, mais il ne me laisseraient pas. La raison pour laquelle je voulais faire cela est que j'en arrivais à la conclusion que ce sont les deux principales façons de le faire, mais laquelle choisir dépend du cas individuel (principalement la taille de la base de données).
Également exécuter les tests à des moments différents, de sorte qu'ils n'affectent pas la performance ou la validité de l'autre.
Juste pour ajouter à la réponse de Free Wildebeest j'ai également utilisé HSQLDB pour faire un test de type similaire où chaque test obtient une instance propre de la DB.
Bien que n'étant pas aussi intelligent que le cadre de test de l'unité Rails dans l'une des autres réponses ici, la création de données distinctes par test ou groupe de tests est une autre façon de le faire. Le niveau d'ennui avec cette solution dépend du nombre de cas de test que vous avez et de leur degré de dépendance l'un par rapport à l'autre. L'ennui sera vrai si vous avez une base de données par test ou un groupe de tests dépendants.
Lors de l'exécution de la suite de tests, vous chargez les données au démarrage, exécutez la suite de tests, déchargez/comparez les résultats en vous assurant que le résultat réel correspond au résultat attendu. Sinon, recommencez le cycle. Charger, exécuter une suite, décharger/comparer.
- 1. Tests de la base de données après intégration (Selenium)
- 2. Stratégies de chargement de données et d'initialisation de base de données pour les tests d'intégration
- 3. tests de données axée sur le concombre
- 4. Création de tests JUnit pour les éléments de base de données avec des clés générées automatiquement
- 5. Effacement de la base de données de test entre tests unitaires et fonctionnels dans Rails (factory_girl)
- 6. Tests d'intégration utilisant Selenium et NUnit - De l'interface utilisateur à la base de données
- 7. Pourquoi les tests d'unité de base de données VS utilisant TransactionScope et MSDTC échouent-ils?
- 8. Tests de Rails avec accès à une base de données hors processus?
- 9. Comment exécuter des tests d'intégration Rails sans supprimer le contenu de la base de données?
- 10. de base de données
- 11. Latence de réseau de base de données
- 12. base de données postgresql
- 13. Base de données relationnelle
- 14. base de données autonome
- 15. Base de données LINQ
- 16. Base de données Null
- 17. Base de données répliquée
- 18. comment créer une nouvelle base de données avant l'exécution des tests?
- 19. Besoin de base de données
- 20. Comparaison de base de données
- 21. outils de base de données
- 22. Réplication de base de données
- 23. Base de données de logiciels
- 24. Index de base de données
- 25. Insérer dans la base de données oracle
- 26. Cadre de tests unitaires pour bases de données
- 27. Comment tester un schéma de base de données django?
- 28. Exécuter MSTest avec des tests sur différentes bases de données
- 29. Question de modèle de conception de base de données relationnelle - base de données Massive Read Only
- 30. Projet de base de données VS 2008 manquant Noeud de références de base de données
Je trouve toujours un problème sur stackoverflow. C'est le problème du choix quand vous voulez vraiment dire que les deux sont bons. Je suppose que si les deux sont également utiles, ils seront votés par des numéros similaires, alors restez près du sommet. Laissez les gens décider :) –