Ik ben de auteur van de embedded-database-spring-test-bibliotheek die werd genoemd door @MartinVolejnik. Ik denk dat de bibliotheek aan al je behoeften moet voldoen (PostgreSQL + Spring Boot + Flyway + integratietesten). Het spijt me echt dat je problemen hebt, dus ik heb een eenvoudige demo-app gemaakt die het gebruik van de bibliotheek samen met het Spring Boot-framework demonstreert. Hieronder heb ik een aantal basisstappen samengevat die je moet doen.
Maven-configuratie
Voeg de volgende maven-afhankelijkheid toe:
<dependency>
<groupId>io.zonky.test</groupId>
<artifactId>embedded-database-spring-test</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
Flyway-configuratie
Voeg de volgende eigenschap toe aan uw applicatieconfiguratie:
# 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
Zorg er verder voor dat u org.flywaydb.test.junit.FlywayTestExecutionListener
niet gebruikt . Omdat de bibliotheek zijn eigen testuitvoeringslistener heeft die de database-initialisatie kan optimaliseren en deze optimalisatie heeft geen effect als de FlywayTestExecutionListener
wordt toegepast.
Voorbeeld
Een voorbeeld van een testklasse die het gebruik van de embedded database demonstreert:
@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");
});
}
}