【问题标题】:How to clear test environment TestContainer in QuarkusQuarkus中如何清除测试环境TestContainer
【发布时间】:2021-05-13 17:41:54
【问题描述】:

我正在努力使用 TestContainers 删除保存在容器中的所有数据。 我能够从 MongoDB 测试容器创建和检索数据,但是每个测试用例都应该是自包含的,并且一个测试不应该影响另一个测试。如果我无法以某种方式“清除”我的数据库,那么在测试“A 类”之后,在执行“B 类”测试时,我的数据库中将会出现一些“脏”。

在 Spring Boot 环境中,我可以使用以下任一方法轻松处理这些情况:

@DirtyContext

    @Autowired
    MongoTemplate mongoTemplate
    
    @BeforeEach
    public void setup(){
        mongoTemplate.dropCollection(ClassName.class)
    }

我知道我可以在容器上执行一些命令,这是我目前所做的:

    private static final MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:latest");

    @SneakyThrows
    @Override
    public Map<String, String> start() {
        mongoDBContainer.start();
        return Collections.singletonMap("quarkus.mongodb.connection-string",
        mongoDBContainer.getReplicaSetUrl());

    }

    @Override
    public void stop() {
        mongoDBContainer.close();
    }

试图简单地执行 show dbs 并没有让我得到任何东西。

@SneakyThrows
public void show(){
   mongoDBContainer.execInContainer("show dbs");
}

我能否连接到容器并手动执行db.collection.drop()?如果是,我很乐意接受一些提示和 sn-ps。 (Obs:任何执行此操作的 API 都会更好)。

【问题讨论】:

    标签: mongodb quarkus testcontainers-junit5


    【解决方案1】:

    运行mongoDBContainer.execInContainer("show dbs"); 将在容器shell(sh 或bash)而不是MongoDB shell(mongos)上执行show dbs 命令,这就是它不起作用的原因。

    您可以做的最好的事情是在您的测试中注入一个MongoClient,然后将集合放入一个@BeforeClass 注释方法中。

    【讨论】:

    • 嗯...这解释了我遇到的很多错误,我应该早点注意到它。我会尝试像你说的那样注入 MongoClient 并执行测试。
    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2021-10-17
    • 2020-07-08
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多