Аз съм автор на библиотеката embedded-database-spring-test, която беше спомената от @MartinVolejnik. Мисля, че библиотеката трябва да отговаря на всички ваши нужди (PostgreSQL + Spring Boot + Flyway + интеграционно тестване). Наистина съжалявам, че имате проблеми, затова създадох просто демо приложение, което демонстрира използването на библиотеката заедно с рамката на Spring Boot. По-долу обобщих някои основни стъпки, които трябва да направите.
Конфигурация на Maven
Добавете следната зависимост на maven:
<dependency>
<groupId>io.zonky.test</groupId>
<artifactId>embedded-database-spring-test</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
Конфигурация на Flyway
Добавете следното свойство към конфигурацията на приложението си:
# 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
Освен това се уверете, че не използвате org.flywaydb.test.junit.FlywayTestExecutionListener
. Тъй като библиотеката има свой собствен слушател за изпълнение на тестове, който може да оптимизира инициализацията на базата данни и тази оптимизация няма ефект, ако FlywayTestExecutionListener
се прилага.
Пример
Пример за тестов клас, демонстриращ използването на вградената база данни:
@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");
});
}
}