0

我正在努力使用 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();
    }

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

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

我可以连接到容器并手动执行db.collection.drop()吗?如果是的话,我很乐意接受一些提示和片段。(Obs:任何这样做的 API 都会更好)。

4

1 回答 1

0

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

您可以做的最好的事情是MongoClient在您的测试中注入 a 并将集合放入带@BeforeClass注释的方法中。

于 2021-02-16T08:28:30.147 回答