首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Micronaut应用程序中使用TestContainer的测试环境的ApplicationContext不起作用

在Micronaut应用程序中使用TestContainer的测试环境的ApplicationContext不起作用
EN

Stack Overflow用户
提问于 2021-08-15 03:32:27
回答 1查看 248关注 0票数 0

我正在尝试使用MongoDb和RabbitMQ测试容器测试Micronaut应用程序。application.yml的配置如下

代码语言:javascript
复制
mongodb:
  uri: "mongodb://${MONGO_HOST:localhost}:${MONGO_PORT:27017}"
  database: "FeteBird-Product"

我有以下配置代码

代码语言:javascript
复制
@Introspected
@ConfigurationProperties("mongodb")
public record MongodbConfiguration(@NotNull String uri, @NotNull String database) {
}

在存储库中。存储库位于另一个项目中

代码语言:javascript
复制
@Singleton
    public record Repository(MongoClient mongoClient, MongodbConfiguration mongodbConfiguration) implements IRepository {
    @Override
    public <T> MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass) {
        return mongoClient
                .getDatabase(mongodbConfiguration.database())
                .getCollection(collectionName, typeParameterClass);
    }
}

mongodbConfiguration.uri始终为mongodb://localhost:27017,但是在JUnit测试中,我使用了以下代码

代码语言:javascript
复制
@Testcontainers
public abstract class TestContainerFixture {
    public static final GenericContainer mongoDBContainer;
    public static final GenericContainer rabbitMQContainer;

    static {
        mongoDBContainer = new GenericContainer(DockerImageName.parse("mongo:4.0.10")).withExposedPorts(27017);
        rabbitMQContainer = new GenericContainer(DockerImageName.parse("rabbitmq:3-management-alpine")).withExposedPorts(5672);
        mongoDBContainer.start();
        rabbitMQContainer.start();
    }
}

@MicronautTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class DiscountDeleteListenerTest extends TestContainerFixture {
    
    private ApplicationContext applicationContext;

@BeforeAll
@DisplayName("Initial application setup")
void initialApplicationSetup() {
    applicationContext = ApplicationContext.run(
            Map.of("mongodb.uri",
                    String.format("mongodb://%s:%s", mongoDBContainer.getContainerIpAddress(), mongoDBContainer.getMappedPort(27017)),
                    "rabbitmq.uri",
                    String.format("amqp://%s:%s", rabbitMQContainer.getContainerIpAddress(), rabbitMQContainer.getMappedPort(5672)))
            , "test"
    );
    iDiscountProducer = applicationContext.getBean(IDiscountProducer.class);
}
}

下面的代码很好用

代码语言:javascript
复制
String.format("mongodb://%s:%s", mongoDBContainer.getContainerIpAddress(), mongoDBContainer.getMappedPort(27017)) 

这会将URL指定为mongodb://localhost:57032

现在,当我完成所有单元测试并检查数据库时,它将插入、更新和删除本地docker实例,即端口27017

群集的主机仍指向27017

从这里得到了一些想法,https://github.com/micronaut-projects/micronaut-test/issues/32,但仍然不确定如何做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2021-08-15 13:41:33

我们不能同时使用MicronautTest和TestContainer。当您使用MicronautTest注释测试时,它会在调用初始化方法之前唤醒应用程序

所以删除@MicronautTest就可以解决这个问题

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68788506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档