J'ai un projet dont je suis bâtiment avec Maven qui utilise Hibernate (et au Printemps) pour récupérer des données à partir d'une base de données, etc.
Mes "tests" pour les DAOs dans mon projet d'étendre le Printemps de l' AbstractTransactionalDataSourceSpringContextTests
, de sorte qu'une source de données peut être câblé dans ma classe en cours de test pour être en mesure d'exécuter la requête/Hibernate logique, d'extraction des données, etc.
Sur plusieurs autres projets, j'ai utilisé ces types de test, de concert avec une base de données HSQL (soit en mémoire ou en pointe sur un fichier) pour tester la réelle interrogation de bases de données logique sans compter sur une base de données externe. Cela fonctionne très bien, car il permet d'éviter toute dépendance externe et "l'état" de la base de données avant de lancer les tests (qui sont enveloppés dans une transaction qui est restaurée) est bien définie.
Je suis curieux de savoir si la meilleure façon d'organiser ces tests, qui sont vraiment un lâche saveur de tests d'intégration avec Maven. Il se sent un peu sale à garder ces tests en src/test/java
, mais de ce que j'ai lu il ne semble pas être une stratégie cohérente ou pratique pour l'organisation des tests d'intégration avec Maven.
De ce que j'ai lu jusqu'à présent, il semble que je peux utiliser le Failsafe plugin (ou une deuxième instance de Surefire) et le lier à l' integration-test
de phase, et que je peux également lier personnalisé de démarrage ou d'arrêt de la logique (comme pour le démarrage/arrêt de la HSQL instance) pre-integration-test
ou post-integration-test
. Mais, est-ce vraiment la meilleure méthode?
Donc ma question est fondamentalement - qu'est-ce que les meilleures pratiques généralement acceptées sur la façon d'organiser cela avec Maven? Je vais avoir du mal à trouver toute sorte de cohérence de la réponse dans la documentation.
Ce que j'aimerais c'est:
- Séparer les tests unitaires à partir des tests d'intégration, de sorte que seules les tests unitaires sont exécutés au cours de l'
test
phase - La capacité à se lier personnalisé démarrage/arrêt de la logique d'
pre-integration-test
etpost-integration-test
- Avoir les rapports de l'intégration-tests fusionné/présenté avec l'unité de test Infaillible rapports