【发布时间】:2020-12-20 19:43:29
【问题描述】:
我正在 Spring Boot 项目中实现集成测试套件。我的项目正在使用 Flyway 进行数据库迁移。
我的测试类看起来像这样:
@SpringBootTest
@AutoConfigureMockMvc
@Testcontainers
internal class MyIntegrationTest {
@Container
private val postgres = postgresContainer
@Autowired
private lateinit var mockMvc: MockMvc
// ... several test cases
}
Spring Boot 在应用上下文启动时运行 Flyway 迁移。问题是@SpringBootTest 仅启动应用程序上下文一次,因此我的数据库仅在在所有测试之前而不是在每个测试之前初始化。
我还尝试在我的测试类中注入 Flyway 字段:
@Autowired
private lateinit var flyway: Flyway
@BeforeEach
fun setup() {
flyway.migrate()
}
但是有No qualifying bean of type 'org.flywaydb.core.Flyway' available。
那么,在每次测试之前触发迁移的正确方法是什么?
注意事项:
- (PostgreSQL) 测试容器已正确创建并为每个单独的测试启动。
- 我在 application.properties 中使用这个配置:
spring.flyway.enabled=false
【问题讨论】:
-
注入 flyway 字段并运行 flyway.clean(),flyway.migrate() 应该可以工作。您是否检查过为什么找不到合格的 bean?
-
@OnomeSotu,是的,你是对的。我为 Flyway 使用了错误的配置...
标签: spring spring-boot kotlin database-migration flyway