Mongo 在测试容器中

Mongo in testcontainers


我开始使用 testcontainers,在我的旅程开始时,我遇到了一些问题(如下)。我为 mysql db 做了类似的事情并且工作正常。我是否遗漏了一些 mongo 特定配置?根据 [docs][1] 没有太多可做的。
提前感谢您提供任何提示/示例。
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

我的代码:
gradle.build

 testImplementation "org.testcontainers:spock:1.14.3"
 testImplementation "org.testcontainers:mongodb:1.14.3"

application.properties

spring.data.mongodb.uri=mongodb://127.0.0.1:27017/test

测试

@Testcontainers
class TestContainersExample extends IntegrationSpec {
    @Shared
    MongoDBContainer mongoDb = new MongoDBContainer()

    def "setup"() {
        mongoDb.start()

        mongoDb.waitingFor(Wait.forListeningPort()
                .withStartupTimeout(Duration.ofSeconds(180L)));
    }


//test case
}
  

Testcontainers 会将 MongoDB 服务器端口映射到您计算机上的随机端口。这就是为什么您不能在 属性 文件中硬编码 spring.data.mongodb.uri=mongodb://127.0.0.1:27017/test

使用 JUnit 5 和 Spring Boot >= 2.2.6 的基本设置如下所示

@Testcontainers
public class MongoDbIT {

  @Container
  public static MongoDBContainer mongoDBContainer = new MongoDBContainer();

  @DynamicPropertySource
  static void mongoDbProperties(DynamicPropertyRegistry registry) {
    registry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);
  }


}

如果您使用不同的 JUnit 或 Spring 引导版本,请查看以下 correct Testcontainers setup 指南。