如何制作使用 liquibase 进行初始化的 DataR2dbcTest

问题描述 投票:0回答:1

使用 r2dbc 配置进行 liquibase 初始化展示了如何使用 Liquibase 设置 R2DBC。我想使用测试容器创建一个测试。

@DataR2dbcTest(properties = [
  "spring.datasource.url: jdbc:tc:mysql://mysql/gateway?TC_IMAGE_TAG=8",
"spring.r2dbc.url: r2dbc:tc:mysql://mysql/gateway?TC_IMAGE_TAG=8"])
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@ContextConfiguration(classes = [
  Application::class,
  LiquibaseAutoConfiguration::class // this didn't work either
])
class ApplicationR2dbcTests {

  @Autowired lateinit var applicationContext: ApplicationContext
  
  ...
}
unit-testing liquibase testcontainers r2dbc
1个回答
0
投票

结合以下答案中的知识:

@Testcontainers
@DataR2dbcTest()
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@ContextConfiguration(
    classes =
        [
            Application::class,
            LiquibaseAutoConfiguration::class])
class ApplicationR2dbcTests {
  @Autowired lateinit var connectionFactory: ConnectionFactory

  companion object {
    @Container private var mySqlContainer = MySQLContainer("mysql:8")

    @JvmStatic
    @DynamicPropertySource
    fun registerDynamicProperties(registry: DynamicPropertyRegistry) {
      registry.add("spring.liquibase.url") {
        "jdbc:mysql://${mySqlContainer.host}:${mySqlContainer.firstMappedPort}/${mySqlContainer.databaseName}"
      }
      registry.add("spring.liquibase.user") {
          mySqlContainer.username
      }
      registry.add("spring.liquibase.password") { mySqlContainer.password }

      registry.add("spring.r2dbc.url") {
        "r2dbc:mysql://${mySqlContainer.host}:${mySqlContainer.firstMappedPort}/${mySqlContainer.databaseName}"
      }
      registry.add("spring.r2dbc.username") { mySqlContainer.username }
      registry.add("spring.r2dbc.password") { mySqlContainer.password }
    }
  }

  @Test
  fun liquibaseChangesMade() {
      StepVerifier.create(DatabaseClient
         .create(connectionFactory)
         .sql("select count(*) from DATABASECHANGELOG")
          .map { it -> it.get(0) as Long }
          .all()
      )
          .expectNextMatches { it > 0 }
          .verifyComplete()
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.