问题标签 [testcontainers-junit5]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-boot - Spring JUnit 5 ExtendWith TestContainer
我正在尝试重新利用容器,并且正在尝试使用 JUnit5 ExtendWith 功能,但我仍然得到:
连接到 localhost:5432 被拒绝。
如果我在每个测试中都有相同的逻辑,那么一切都会按预期工作。
扩展:
testcontainers - 我们如何跳过在可重用容器上执行初始化脚本?
当使用带有 init 脚本的可重用容器时,它会在每次测试开始时运行脚本,即使正在重用相同的 DB。在初始化脚本中,我创建和插入语句,所以每次运行测试时,它都会尝试执行 sql 语句,但由于表已经存在而失败。
java - 测试容器:服务就绪后同步日志
我正在使用 Testcontainers 开发一些组件测试。我可以同步服务就绪测试。但是,一旦服务准备好,我需要准备夹具并运行测试,直到夹具完全加载。
被测容器写了一个日志,我可以用它来了解夹具何时完全加载。但是,我找不到在该日志上同步的方法。
Testcontainers 库是否为此提供任何实用程序?
postgresql - 无法通过 @Sql 注释自动运行 sql 脚本
我绝对需要使用带有注释@BeforeAll和@AfterAll的非静态方法。但是这些注解只有在我们有
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
但是当使用@TestInstance(testInstance.Lifecycle.PER_CLASS)时,sql 脚本的自动运行不起作用,通过注释@Sql。
为什么会发生,我该如何纠正?
java - Jooq 原生查询不使用连接信息
在我的集成测试中,我配置了我的 dslContext
并写了一个插入:
效果很好。完全没有问题。
因此,由于我需要添加大量数据,因此我不想填充我的代码库。所以我将插入移动到一个文件中并在我的测试中读取它:
这对我来说非常方便,因为现在我可以将 DBeaver 生成的插入语句复制粘贴到一个文件中,然后让 jooq 完成剩下的工作。sql文件的内容是:
但!引发了连接问题,我不知道为什么,因为我的 dslContext 配置良好,您可以从成功执行的 dslContext.insertInto.. 命令中清楚地看到。错误:
原因:org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException:在 org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException 的表 'ATTACHMENT' 中,用户 'test'@'172.17.0.1' 的 INSERT 命令被拒绝.of(MariaDbSqlException.java:34) 在 org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:194) 在 org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:177) ) 在 org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220) 的 org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:321) ... 72 更多原因:java.sql .SQLException:对 org.mariadb.jdbc 中的表 'ATTACHMENT' 的用户 'test'@'172.17.0.1' 拒绝 INSERT 命令。internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1694) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1556) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult( AbstractQueryProtocol.java:1519) 在 org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:318) ... 73 更多
为什么 dslContext 对 .query() 有单独的配置?还是我误解了什么?我很欣赏你的意见,谢谢。
mysql - 为什么在使用spring boot进行测试时,特定注释会导致init.sql文件在mysql测试容器中失败?
包含 # 的注释在 mysql 5.7 中完全有效,根据:https ://dev.mysql.com/doc/refman/5.7/en/comments.html似乎破坏了 mysql docker 测试容器的初始化文件。当我将 application-test.properties 文件中的数据源初始化为:
test-init.sql 文件中的任何这样的注释都会导致 mysql 在注释结构如下时忽略文件的其余部分:
但是,当评论是这样的:
文件的其余部分成功执行。
此外,测试容器不会引发 mysql 错误。相反,当我尝试在我的应用程序代码中引用它们时,它会告诉我我的表不存在。
我也使用测试容器而不是 H2,因为我希望它支持确切的 mysql 语法。有没有人暗示我如何纠正这个问题?我通常使用 sequel pro 的导出功能从现有数据库中导出模式。
docker - JUnit5 Testcontainers docker compose模块测试初始化错误:Bitbucket Pipelines中的容器启动失败
我有一个使用 JUnit5 进行测试的 springboot 应用程序取决于 minio 和 minio/mc。由于我已经为他们准备了 docker-compose.yml 文件,因此我在测试中使用了 Testcontainers docker compose 模块。但是我在 bitbucket-pipelines 中遇到了这个错误:
org.testcontainers.containers.ContainerLaunchException:容器启动在 org.testcontainers.containers.GenericContainer.start(GenericContainer.java:317) 在 org.testcontainers.GenericContainer.doStart(GenericContainer.java:336) 失败。 container.ContainerisedDockerCompose.invoke(DockerComposeContainer.java:646) 在 org.testcontainers.containers.DockerComposeContainer.runWithCompose(DockerComposeContainer.java:309) 在 org.testcontainers.containers.DockerComposeContainer.createServices(DockerComposeContainer.java:233) 在 org.testcontainers .containers.DockerComposeContainer.start(DockerComposeContainer.java:177) 在 org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.start(TestcontainersExtension.java:242) 在 org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter。在 org.junit.jupiter.engine.execution.ExtensionValuesStore.lambda$getOrComputeIfAbsent$4(ExtensionValuesStore) 在 org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$null$1(TestcontainersExtension.java:59) 访问 $200(TestcontainersExtension.java:229) .java:86) 在 org.junit.jupiter.engine.execution.ExtensionValuesStore$MemoizingSupplier.computeValue(ExtensionValuesStore.java:223) 在 org.junit.jupiter.engine.execution.ExtensionValuesStore$MemoizingSupplier.get(ExtensionValuesStore.java:211 )在 org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.evaluate(ExtensionValuesStore.java:191) 在 org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.access$100(ExtensionValuesStore.java:171) 在 org org.junit.jupiter 的 .junit.jupiter.engine.execution.ExtensionValuesStore.getOrComputeIfAbsent(ExtensionValuesStore.java:89)。engine.execution.NamespaceAwareStore.getOrComputeIfAbsent(NamespaceAwareStore.java:53) at org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$beforeAll$2(TestcontainersExtension.java:59) at java.base/java.util.ArrayList.forEach(ArrayList .java:1541) 在 org.testcontainers.j
然后在 bitbucket docker service log 中,其中一行说:
但我不知道那里发生了什么。
java - 测试容器无法配置端口绑定
我正在使用 testcontainer 版本1.15.2
。测试在 Windows 10 上的 intellij 中运行。我有一个wiremock 容器。默认情况下,它侦听端口8080
。我想将这个端口映射到让我们说8081
。所以我这样做:
创建容器时,它会侦听随机端口,而不是8081
[1]。我究竟做错了什么 ?我应该怎么做才能让容器监听8081
而不是随机端口?
[1]
- 我有另一个容器尝试连接
http://wiremock:8081
并不断获取Connection refused
- 当我添加时:
.waitingFor((...)forPort(8081)(...)));
发生超时。
java - 如何为多个 Jupiter 测试制作一个通用的 @Testcontainer?
我有一个抽象的控制器测试类及其带有单元的继承者,但我想根据他们正在测试的控制器方法将测试分成不同的类。每次我创建第二个测试类并在其中进行测试时,都会出现以下错误:
Failed to validate connection org.postgresql.jdbc.PgConnection@28806954 (This connection has been closed.). Possibly consider using a shorter maxLifetime value.
我有以下基类:
测试在单个继承者类中工作得很好。
我正在使用org.testcontainers:junit-jupiter:1.16.2
相同版本的 postgresql 和spring boot 2.5.6
. @Test
注释来自org.junit.jupiter.api.Test
我曾尝试添加@Testcontainers
继承者并将其从基本测试类中删除,但它没有帮助。
maven - Maven 集成测试中未考虑 @Convert
我有一个简单的 LocalDateTime - Timestamp - 在@Entity 中使用的转换器,如下所示:
这用于 LocalDateTime 字段的实体中,如下所示:
需要进行此转换以避免在空(null)值上出现以下错误:
ORA-00932: 不一致的数据类型: 预期的 TIMESTAMP 得到 BINARY
假设针对 oracle-xe testcontainer 在本地执行以下测试可以正常工作:
mvn test
由于上述错误,使用 maven build ( ) 执行相同的测试失败。调试显示在 maven 测试中执行时根本没有调用转换器。
谁能指出我正确的方向理解并最终解决这个问题?与 Maven 相比,在 IDE 中执行测试有什么区别?
作为解决方法,我可以不使用 LocalDateTime 但无论如何我想了解这个问题。