微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何清除Quarkus中的测试环境TestContainer

如何解决如何清除Quarkus中的测试环境TestContainer

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

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

public static double CelsiusToFahrenheit(string temperatureCelsius)
{
    double celsius = System.Double.Parse(temperatureCelsius);
    return (celsius * 9 / 5) + 32;
}
public static double FahrenheitToCelsius(string temperatureFahrenheit)
{
    double fahrenheit = System.Double.Parse(temperatureFahrenheit);
    return (fahrenheit - 32) * 5 / 9;
}

@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"); } 吗?如果是,我很乐意接受一些提示和片段。 (Obs:任何能做到这一点的 API 都会更好)。

解决方法

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

你能做的最好的事情是在你的测试中注入一个 MongoClient 并将集合放入一个 @BeforeClass 注释方法中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。