Tôi là tác giả của thư viện nhúng-cơ sở dữ liệu-spring-test đã được @MartinVolejnik đề cập. Tôi nghĩ rằng thư viện sẽ đáp ứng tất cả các nhu cầu của bạn (PostgreSQL + Spring Boot + Flyway + kiểm tra tích hợp). Tôi thực sự xin lỗi vì bạn đang gặp một số rắc rối, vì vậy tôi đã tạo một ứng dụng demo đơn giản để minh họa việc sử dụng thư viện cùng với khuôn khổ Spring Boot. Dưới đây, tôi tóm tắt một số bước cơ bản mà bạn cần thực hiện.
Cấu hình maven
Thêm phần phụ thuộc maven sau:
<dependency>
<groupId>io.zonky.test</groupId>
<artifactId>embedded-database-spring-test</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
Cấu hình đường bay
Thêm thuộc tính sau vào cấu hình ứng dụng của bạn:
# 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
Hơn nữa, hãy đảm bảo rằng bạn không sử dụng org.flywaydb.test.junit.FlywayTestExecutionListener
. Bởi vì thư viện có trình xử lý thực thi thử nghiệm riêng có thể tối ưu hóa quá trình khởi tạo cơ sở dữ liệu và việc tối ưu hóa này không có tác dụng nếu FlywayTestExecutionListener
được áp dụng.
Ví dụ
Một ví dụ về lớp thử nghiệm thể hiện việc sử dụng cơ sở dữ liệu nhúng:
@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");
});
}
}