¿Por qué no se está utilizando la configuración de mi application-test.properties?
Estoy intentando ejecutar pruebas en mi aplicación Spring que necesitan usar una base de datos h2 integrada (en lugar de la base de datos SQL que uso para la aplicación real). El problema que enfrentaba era que estaba ejecutando todas las consultas en la base de datos h2 en mayúsculas y fallaba por eso.
org.h2.jdbc.JdbcSQLSyntaxErrorException: tabla "MOOD" no encontrada; instrucción SQL:
insert into mood
Ahora descubrí en las propiedades de la aplicación que solo tiene que poner DATABASE_TO_LOWER = TRUE en la cadena de conexión, pero esto no funciona para mí. Puedo ver claramente en la salida que no está utilizando la URL que estoy definiendo en application-test.properties.
Entonces los archivos relevantes son:
Mi application-test.properties:
spring.datasource.driver-class-name = org.h2.Driver
spring.datasource.url = jdbc: h2: mem: db; DB_CLOSE_DELAY-2; DATABASE_TO_LOWER = TRUE
spring.datasource.username = sa
spring.datasource.password = sa
Mi clase de test:
package com.example.demo.persistence.interfaces;
import com.example.demo.persistence.dto.Mood;
import com.example.demo.persistence.dto.MoodType;
import com.example.demo.persistence.dto.Patient;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource;
import java.util.Calendar;
import java.util.Collection;
import static org.junit.jupiter.api.Assertions.*;
@DataJpaTest
@ActiveProfiles("test")
@TestPropertySource(locations = "classpath: application-test.properties")
@EnableConfigurationProperties
class MoodRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private MoodRepository repository;
@Autowired
private PatientRepository patientRepository;
@Test
void getMoodsByPatient () {
final Patient patient = new Patient ("Kees", "spek", "straat", Calendar.getInstance().getTime ());
final Patient patient2 = new Patient ("Kees2", "spek2", "straat2", Calendar.getInstance().getTime ());
final Mood mood1 = new Mood (patient, MoodType.GOOD, "", "", "", "", "", "", "", Calendar.getInstance().getTime ());
final Mood mood2 = new Mood (patient, MoodType.GOOD, "", "", "", "", "", "", "", Calendar.getInstance().getTime ());
final Mood mood3 = new Mood (patient2, MoodType.GOOD, "", "", "", "", "", "", "", Calendar.getInstance().getTime ());
entityManager.persist (patient);
entityManager.persist (patient2);
entityManager.persist (mood1);
entityManager.persist (mood2);
entityManager.persist (mood3);
final int expectedMoodsFound = 2;
final int actualMoodsFound = ((Collection<?>) repository.getMoodsByPatient (patient)). size ();
assertEquals (expectedMoodsFound, actualMoodsFound);
}
@Test
void getMoodByMoodId () {
}
@Test
void deleteAllByDateBefore () {
}
}
Entonces mi problema es, aparentemente no puedo cargar adecuadamente application-test.properties, ¿supongo? ¿Qué estoy haciendo mal? Leí tantas cosas diferentes en StackOverflow y otros sitios web y ninguno de ellos funcionó y siento que es un problema bastante simple.
davy.ai
Parece que el problema está en la configuración del archivo application-test.properties. El valor del parámetro DB_CLOSE_DELAY parece ser incorrecto, debe establecerse en -1 en lugar de -2.
Intente modificar el archivo application-test.properties para incluir el valor correcto de DB_CLOSE_DELAY y vea si resuelve el problema. Además, asegúrese de que el archivo application-test.properties se encuentre en la ubicación correcta (src/test/resources) y esté siendo tomado por la clase de prueba.