starter - spring boot test repository
Prueba de Spring Boot usando en memoria db (1)
Creé un proyecto web Spring utilizando Spring Boot. Me gustaría entender la práctica en torno a las pruebas. Necesito una base de datos incrustada en memoria, digamos hsql o h2 para mis junits con esquema inicial.sql. Y en la aplicación principal la base de datos podría ser decir mysql u oráculo
En un proyecto que no sea de Spring Boot, normalmente tendríamos un applicationcontext.xml por separado que es referido por la aplicación web y para las pruebas usaríamos applicationContext-text.xml
Ahora, en Spring boot, todo se crea automáticamente y Spring Boot también se considera. Me gustaría saber cómo configuro una incrustada inmemory db para Junits y una base de datos externa como MySQL para la aplicación.
Una solución en la que puedo pensar es usar perfiles. con 2 propiedades file application.properties y application-test.properties. y usar el perfil de prueba para mis junits.
Cualquier recomendación sobre el enfoque que debería tomar.
Un perfil es, de hecho, el enfoque recomendado. Lo que haría probablemente sea que la implementación en memoria sea el perfil "predeterminado" (es inofensivo, en el sentido de que nunca cambia datos reales, por lo que es mejor hacerlo predeterminado en caso de que alguien accidentalmente lo ejecute contra una base de datos real) ) Personalmente, prefiero poner toda la configuración externa en un único archivo application.yml
, pero eso depende de ti. En la configuración externa, debe proporcionar una clase de controlador y una URL válidos, por ejemplo
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:
(Tenga en cuenta que H2 tiene un modo de compatibilidad postgres, por lo que es muy bueno como complemento de postgres en producción.)