J'ai créé un projet Web Spring à l'aide de Spring Boot. Aimerait comprendre la pratique des tests. J'ai besoin d'une base de données intégrée en mémoire, par exemple hsql ou h2 pour mes junits avec schema.sql initial. Et sur l'application principale, la base de données pourrait être disons mysql ou Oracle
Dans un projet non Spring Boot, nous aurions normalement un fichier applicationcontext.xml distinct qui est référencé par l'application web et pour les tests, nous utiliserions applicationContext-text.xml
Maintenant, dans Spring Boot, car tout est créé automatiquement et Spring Boot est également considéré. Je voudrais savoir comment configurer un db intégré en mémoire pour Junits et un db externe comme MySQL pour l'application.
Une solution à laquelle je peux penser est d'utiliser des profils. avec 2 fichiers de propriétés application.properties et application-test.properties. et utiliser le profil de test pour mes junits.
Toute recommandation sur l'approche que je devrais adopter.
Un profil est, en effet, l'approche recommandée. Ce que je ferais est probablement de faire de l'implémentation en mémoire le profil "par défaut" (c'est inoffensif, dans le sens où vous ne modifiez jamais de vraies données, il est donc préférable d'en faire la valeur par défaut au cas où quelqu'un l'exécuterait accidentellement sur une vraie base de données ). Personnellement, je préfère mettre toute la configuration externe dans un seul application.yml
fichier, mais cela dépend vraiment de vous. Dans la configuration externe, vous devez fournir une classe de pilote et une URL valides, par exemple.
spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:test;MODE=PostgreSQL
schema: classpath:/schema.sql
---
spring:
profiles: local
datasource:
url: jdbc:postgresql://localhost/test
username: root
password: changeme
driverClassName: org.postgresql.Driver
schema:
(Notez que H2 a un mode de compatibilité postgres, donc c'est vraiment sympa en complément des postgres en production.)