Micronaut 重用测试容器
Posted
技术标签:
【中文标题】Micronaut 重用测试容器【英文标题】:Micronaut to reuse testcontainer 【发布时间】: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
吗?如果是,你不应该。请参阅***.com/a/62443261/696714
【参考方案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 开始
【讨论】:
以上是关于Micronaut 重用测试容器的主要内容,如果未能解决你的问题,请参考以下文章
使用 Micronaut 应用程序为 JUnit5 中的每个单元/集成测试运行一次 TestContainer
在 Micronaut 应用程序中使用 TestContainer 的测试环境的 ApplicationContext 不起作用