小编Mar*_*rco的帖子

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

我试图定义一个@TestConfiguration在所有集成测试之前执行一次的类,以在 Spring Boot 项目中的 Kotlin 中运行 MongoDB TestContainer。

这是代码:

import org.springframework.boot.test.context.TestConfiguration
import org.springframework.test.context.DynamicPropertyRegistry
import org.springframework.test.context.DynamicPropertySource
import org.testcontainers.containers.MongoDBContainer
import org.testcontainers.utility.DockerImageName


@TestConfiguration
class TestContainerMongoConfig {

  companion object {

    @JvmStatic
    private val MONGO_CONTAINER: MongoDBContainer = MongoDBContainer(DockerImageName.parse("mongo").withTag("latest")).withReuse(true)

    @JvmStatic
    @DynamicPropertySource
    private fun emulatorProperties(registry: DynamicPropertyRegistry) {
      registry.add("spring.data.mongodb.uri", MONGO_CONTAINER::getReplicaSetUrl)
    }

    init { MONGO_CONTAINER.start() }

  }

}
Run Code Online (Sandbox Code Playgroud)

问题似乎是该emulatorProperties方法没有被调用。常规流程应该是启动容器,然后设置属性。第一步发生了,第二步则没有。

我知道有一种替代方案,我可以在每个功能测试类中进行此配置,但我不喜欢它,因为它给测试类添加了不需要的噪音。

例如,对于一个使用 Postgres 的 Java 项目,我设法使其与以下代码一起工作:

import javax.sql.DataSource;

import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;


@TestConfiguration
public class PostgresqlTestContainersConfig {

  static final PostgreSQLContainer …
Run Code Online (Sandbox Code Playgroud)

mongodb spring-boot testcontainers

6
推荐指数
2
解决办法
5033
查看次数

标签 统计

mongodb ×1

spring-boot ×1

testcontainers ×1