Initialiser la conformité JDBC dans la base de données de mémoire avec des déclencheurs pour des tests d'intégration?
-
02-01-2020 - |
Question
Actuellement, nous avons une instance de base de données pour tous nos tests d'intégration. Le schéma de base de données Oracle est synchronisé par un tas de DDLS. Ensuite, nous utilisons DBunit pour remplir et tronquer les tables entre tests. Il y a deux problèmes avec cette approche:
- Le temps passé à préparer la base de données est plus que ce qui est passé à tester
- à l'occasion, généralement une défaillance de test, les données de test saignent à un test ultérieur et provoquent plus de défaillances.
- Pourrais-je créer une base de données en mémoire (H2 ou autre) d'un schéma Oracle existant, des déclencheurs inclus?
- ou, puis-je créer une base de données en mémoire à l'aide de mon entitémanager (génération DDL) et de créer un tas de déclencheurs à la volée, mais avant de tester l'exécution?
- printemps: 3.2.8
- Données de printemps JPA: 1.5.3
- Eclipse Link: 2.5.1
- Oracle: 11
Je veux isoler les tests en créant une base de données en mémoire (telle que H2) par test. Je prévois de configurer Eclipselink pour générer le DDL (en raison de la conversion de l'oracle DDL en quelque chose d'autre sera un cauchemar que j'imagine). La seule question à ce stade serait de créer des déclencheurs.
Alors j'ai deux questions ...
pile technologique:
Je connais comment instancier un environnement d'intégration de test de ressort pour charger une base de données en mémoire. Tout simplement pas sûr de la façon dont je peux traduire les trucs oracle (déclencheurs, spécifiquement).
La solution
Pourrais-je créer une base de données en mémoire (H2 ou autre) d'un schéma Oracle existant, des déclencheurs inclus?
Oui, vous pouvez avoir ceci. Nous utilisons Postgres pour toutes nos bases de données physiques et HSQL pour la base de données en mémoire. Nous avons démarré avec l'utilisation de Hibernate pour générer la base de données des classes d'entités, mais nous avons maintenant migré pour utiliser la migration. N'oubliez pas que certains de vos DML et DDL seront personnalisés à Oracle afin que vous fassiez personnaliser pour HSQL ou H2 (assez facile à faire à l'aide de la migration).
ou, puis-je créer une base de données en mémoire à l'aide de mon entitémanager (génération DDL) et de créer une bande de déclencheurs à la volée, mais avant de tester l'exécution?
Vous pouvez nettoyer / remplir votre base de données en mémoire, mais vous le souhaitez. Il y a plusieurs manières:
- Extensions de test de voie aérienne - cela facilite la tâche et c'est ce que nous utilisons. https://github.com/flyway/flyway-test-Extensions .
- Écrivez un haricot de printemps qui a un profil de test @profile ("test") et insérera des données pour l'environnement de test.
- Utilisez un script Import.SQL. Je crois que le harnais de test de printemps cherchera ceci.