Mongo在测试容器中 [英] Mongo in testcontainers

查看:192
本文介绍了Mongo在测试容器中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

My code:
gradle.build

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

application.properties

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
}
  

推荐答案

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

Testcontainers will map the MongoDB server port to a random port on your machine. That's why you can't hardcode spring.data.mongodb.uri=mongodb://127.0.0.1:27017/test in your property file.

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

A basic setup with JUnit 5 and Spring Boot >= 2.2.6 can look like the following

@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 Boot,请查看以下

If you are using a different JUnit or Spring Boot version, take a look at the following guide for the correct Testcontainers setup.

这篇关于Mongo在测试容器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆