PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres intégré pour les tests de démarrage de printemps

Je suis l'auteur de la bibliothèque embedded-database-spring-test mentionnée par @MartinVolejnik. Je pense que la bibliothèque devrait répondre à tous vos besoins (PostgreSQL + Spring Boot + Flyway + tests d'intégration). Je suis vraiment désolé que vous rencontriez des problèmes, j'ai donc créé une application de démonstration simple qui illustre l'utilisation de la bibliothèque avec le framework Spring Boot. Ci-dessous, j'ai résumé quelques étapes de base que vous devez suivre.

Configuration Maven

Ajoutez la dépendance Maven suivante :

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

Configuration des voies de migration

Ajoutez la propriété suivante à la configuration de votre application :

# 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

De plus, assurez-vous de ne pas utiliser org.flywaydb.test.junit.FlywayTestExecutionListener . Parce que la bibliothèque a son propre écouteur d'exécution de test qui peut optimiser l'initialisation de la base de données et cette optimisation n'a aucun effet si le FlywayTestExecutionListener est appliqué.

Exemple

Un exemple de classe de test démontrant l'utilisation de la base de données embarquée :

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