PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Eingebettetes Postgres für Spring-Boot-Tests

Ich bin der Autor der Embedded-Database-Spring-Test-Bibliothek, die von @MartinVolejnik erwähnt wurde. Ich denke, die Bibliothek sollte alle Ihre Anforderungen erfüllen (PostgreSQL + Spring Boot + Flyway + Integrationstests). Es tut mir wirklich leid, dass Sie Probleme haben, deshalb habe ich eine einfache Demo-App erstellt, die die Verwendung der Bibliothek zusammen mit dem Spring Boot-Framework demonstriert. Im Folgenden habe ich einige grundlegende Schritte zusammengefasst, die Sie ausführen müssen.

Maven-Konfiguration

Fügen Sie die folgende Maven-Abhängigkeit hinzu:

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

Flyway-Konfiguration

Fügen Sie Ihrer Anwendungskonfiguration die folgende Eigenschaft hinzu:

# 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

Stellen Sie außerdem sicher, dass Sie org.flywaydb.test.junit.FlywayTestExecutionListener nicht verwenden . Da die Bibliothek über einen eigenen Testausführungs-Listener verfügt, der die Datenbankinitialisierung optimieren kann, hat diese Optimierung keine Auswirkungen, wenn der FlywayTestExecutionListener angewendet wird.

Beispiel

Ein Beispiel für eine Testklasse, die die Verwendung der eingebetteten Datenbank demonstriert:

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