PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres incorporado para testes de inicialização do Spring


Eu sou o autor da biblioteca de teste do banco de dados incorporado que foi mencionada por @MartinVolejnik. Acho que a biblioteca deve atender todas as suas necessidades (PostgreSQL + Spring Boot + Flyway + testes de integração). Lamento muito que você esteja tendo problemas, então criei um aplicativo de demonstração simples que demonstra o uso da biblioteca junto com o framework Spring Boot. Abaixo eu resumi alguns passos básicos que você precisa fazer.

Configuração do Maven

Adicione a seguinte dependência do maven:
<dependency>
    <groupId>io.zonky.test</groupId>
    <artifactId>embedded-database-spring-test</artifactId>
    <version>2.0.1</version>
    <scope>test</scope>
</dependency>

Configuração do Flyway

Adicione a seguinte propriedade à configuração do seu aplicativo:
# Sets the schemas managed by Flyway -> change the xxx value to the name of your schema
# flyway.schemas=xxx // for spring boot 1.x.x
spring.flyway.schemas=xxx // for spring boot 2.x.x

Além disso, certifique-se de não usar org.flywaydb.test.junit.FlywayTestExecutionListener . Como a biblioteca tem seu próprio ouvinte de execução de teste que pode otimizar a inicialização do banco de dados e essa otimização não tem efeito se o FlywayTestExecutionListener é aplicado.

Exemplo

Um exemplo de classe de teste demonstrando o uso do banco de dados embutido:
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureEmbeddedDatabase
public class SpringDataJpaAnnotationTest {

    @Autowired
    private PersonRepository personRepository;

    @Test
    public void testEmbeddedDatabase() {
        Optional<Person> personOptional = personRepository.findById(1L);

        assertThat(personOptional).hasValueSatisfying(person -> {
            assertThat(person.getId()).isNotNull();
            assertThat(person.getFirstName()).isEqualTo("Dave");
            assertThat(person.getLastName()).isEqualTo("Syer");
        });
    }
}