web-dev-qa-db-fra.com

Test de Spring Boot à l'aide de la mémoire db

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.

28
Nehal Damania

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.)

40
Dave Syer