PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres integrato per i test di avvio primaverili

Sono l'autore della libreria embedded-database-spring-test menzionata da @MartinVolejnik. Penso che la libreria dovrebbe soddisfare tutte le tue esigenze (PostgreSQL + Spring Boot + Flyway + test di integrazione). Mi dispiace davvero che tu stia riscontrando qualche problema, quindi ho creato una semplice app demo che dimostra l'uso della libreria insieme al framework Spring Boot. Di seguito ho riassunto alcuni passaggi di base che devi fare.

Configurazione Maven

Aggiungi la seguente dipendenza Maven:

<dependency>
    <groupId>io.zonky.test</groupId>
    <artifactId>embedded-database-spring-test</artifactId>
    <version>2.0.1</version>
    <scope>test</scope>
</dependency>

Configurazione del volo

Aggiungi la seguente proprietà alla configurazione dell'applicazione:

# 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

Inoltre, assicurati di non utilizzare org.flywaydb.test.junit.FlywayTestExecutionListener . Perché la libreria dispone di un proprio listener di esecuzione di test in grado di ottimizzare l'inizializzazione del database e questa ottimizzazione non ha alcun effetto se FlywayTestExecutionListener viene applicato.

Esempio

Un esempio di classe di test che dimostra l'uso del database incorporato:

@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");
        });
    }
}