es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , ,

Answer

  1. Avatar for 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.

    spring.datasource.url = jdbc:h2:mem:db; DB_CLOSE_DELAY = -1; DATABASE_TO_LOWER = TRUE
    

    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.

Comments are closed.