【问题标题】:Micronaut to reuse testcontainerMicronaut 重用测试容器
【发布时间】:2021-06-14 16:10:28
【问题描述】:

我正在使用 Micronaut 2.4.0 并使用 testContainers 进行 SQL Server 集成测试。

这是我的 gradle.build

    testImplementation("org.testcontainers:testcontainers")
    testImplementation("org.testcontainers:junit-jupiter")
    testImplementation("org.testcontainers:mssqlserver")

这是用于测试的 application.yml

    url: jdbc:tc:sqlserver://localhost;databaseName=test-db
    username: sa
    password: sa
    driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver

这些是唯一的变化,micronaut 处理测试容器的创建和启动。

问题

对于每个测试类,它都会创建新容器。 测试的大部分时间是在容器创建中。

有没有办法可以重复使用容器? (清除数据库可能仍然可以)

【问题讨论】:

  • 我不确定 Testcontainers 重用功能是否适用于 JDBC 支持。使用手动容器定义,它肯定会起作用(如similar question 所示)。您还可以找到详细示例here(使用 Spring Boot,但设置类似)。
  • 在 spring 中很容易,在 micronaut 中同样不起作用。 application.yml 有连接字符串。在应用启动之前需要一些方法来初始化测试容器
  • 你使用注解@Container 吗?如果是,你不应该。请参阅stackoverflow.com/a/62443261/696714

标签: micronaut testcontainers testcontainers-junit5


【解决方案1】:

迟到的回复,但是,以防有人偶然发现。

尝试将 TC_REUSABLE=true 添加到 jdbc URL 中

即:jdbc:tc:sqlserver://localhost;databaseName=test-db/TC_INITSCRIPT=db/customer_database_schema.sql&TC_REUSABLE=true

【讨论】:

  • 这行得通。我之前的配置“testcontainers.reuse.enable: true”不起作用,这可能是 Spring Boot 而不是 Micronaut 的设置
【解决方案2】:

另一个答案可能是正确的。

我让它在 jdbc URL 中使用 TC_DAEMON=true 参数

所以,它变成了

url: jdbc:tc:sqlserver://localhost;databaseName=mydb?TC_DAEMON=true

编辑

最终我离开了测试容器,现在手动从 docker 开始

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2021-10-18
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多