问题标签 [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.

0 投票
1 回答
140 浏览

testcontainers - 在初始化脚本之前在 postgres 测试容器中创建一个文件夹

我有以下代码:

在初始化脚本中,我正在创建一些表空间并关联文件夹:

这些表空间文件夹应该在初始化脚本运行之前创建。我怎么能做到这一点?

0 投票
0 回答
847 浏览

elasticsearch - 使用 TestContainer 时无法获取 docker 镜像

我正在使用测试容器(https://www.testcontainers.org/)编写一个 junit 测试。当我运行测试时,我得到以下堆栈跟踪。

这是我的 junit 测试中的代码。基本上它试图下载版本为 7.11.2 的弹性搜索泊坞窗图像。但是我无法这样做,并且当我运行我的 junit 测试时,控制台上会抛出一个错误。

这是我的码头工人版本

在 pom.xml 我添加了库

如果你能帮忙谢谢谢谢

0 投票
1 回答
34 浏览

testing - 如何在 bnd 中使用测试容器

我是 bndtools 的新手。我想使用 testcontainers ( https://www.testcontainers.org/ ) 来测试应该连接到 MQTT 代理的 osgi 包。所以我可以测试连接、连接丢失等策略。我不明白 maven 和 bnd 存储库是如何协同工作的,所以在我理解之前,我不使用 maven。然后我尝试通过将 testcontainers 添加到 build.bnd 来“导入”它:

但是 bnd 说“无法加载插件 org.testcontainers:testcontainers:1.15.2。” 我迷路了...

0 投票
1 回答
644 浏览

testcontainers - Testcontainers/LocalStack 是否与 DynamoDb Streams KCL 1.x 一起使用?

问题陈述

我编写了一个程序,该程序利用 DynamoDb Streams 在发生更新时获得通知,此代码在使用 AWS 服务时运行良好,但似乎无法使用 Testcontainers/Localstack 进行集成测试。

做了什么

尝试恢复到旧版本的 testcontainer/localstack

阅读这篇文章,最后有一条评论暗示KCL 1.x 缺少一些 API,这会阻止它与 Localstack 一起使用

但是,Kinesis Client Library-1.x 没有提供将 AWS CloudWatch 服务端点 URL 作为配置参数的功能。

我相信 DynamoDb Kinesis 适配器在内部使用 KCL 1.x,所以,我认为我不能切换到使用 KCL 2.x。顺便说一句,似乎DynamoDb Kinesis Adapter已存档,但 Amazon Docs 仍然引用它,并且该 git 存储库中没有任何内容表明它被存档的原因或改用什么。

怎么了?

我的程序运行良好,没有看到任何错误,但也没有从任何分片获得任何更新信息。

应用程序设计

基本上集成测试开始,它在 LocalStack 中创建所需的表(确认这是通过 AWS CLI 完成的),然后在 DynamoDb 中放置 3 个项目。Spring Boot 应用程序启动并将数据从 DynamoDb 读取到 aa 列表中。集成测试然后调用删除端点,删除端点只是调用CrudRepository.delete函数(通过 Spring Data DynamoDb 实现)。我已经确认实际的 DynamoDb 已从 3 个元素变为 2 个元素,并删除了已删除的元素。但是,当我的应用程序从 KCL 获取更新的记录时,应用程序缓存应该会更新;TreatContainers/localStack 永远不会发生这种情况。

该应用程序InitialPositionInStream.LATEST用于读取分片。

应用程序输出

您可以看到应用程序在 启动并准备就绪13:42:17.468,该项目在 被“删除” 13:42:24.768。然后测试调用Thread.sleep(1000)给 KCL 时间来处理任何更改,然后在13:42:25.793测试中调用服务器以查看该元素是否仍然存在于缓存中,它确实存在。

考虑到这可能是一个时间问题,LocalStack 处理速度很慢,我在我的测试中添加了一个@AfterAll函数,该函数等待 2 分钟。我曾经curl调用get端点,13:44:38.723并且元素仍然存在,这应该有足够的时间让 Localstack 处理分片的更新。

配置信息

  • dynamodb-streams-kinesis-适配器:1.5.2
  • 亚马逊运动客户端:1.13.3
  • junit-jupiter-api: 5.6.0
  • junit-木星:1.15.2
  • 本地堆栈:1.15.2
  • 本地堆栈:0.12.9
  • 本地堆栈实用程序:0.2.10
  • aws-java-sdk-dynamodb:1.11.858
  • spring-boot-starter-web:2.3.3.RELEASE
  • spring data dynamodb(来自 boostchicken fork):5.2.5
  • macOS Catalina:10.15.7
  • 爪哇:15.0.2
  • 码头工人:
0 投票
1 回答
1916 浏览

java - 当 pom.xml 中存在 TestContainers 依赖项时,未检测到 JUnit 5 测试

  1. 我有一个使用 TestContainers(最新 1.5.2)和 JUnit 5(5.7.0)测试的 maven 项目。Surefire 插件设置为 2.22.2 版(请参阅下面的完整 POM)。Maven 版本为 3.6.0 并使用 Java 11。
  2. 我创建了两个测试类:一个使用 JUnit 4.12(可通过 TestContainers 依赖项获得),另一个使用 JUnit 5.7.0
  3. 当定义 POM 中的 TestContainers 依赖项时,调用mvn test仅检测 JUnit 4.12 测试
  4. 当 POM 中的 TestContainers 依赖项被注释掉时,调用来mvn test检测 JUnit 4.12 和 JUnit 5.7.0 测试
  5. 添加exclusion到 TestContainers 依赖项以排除 JUnit 4.12 允许 maven 检测和运行 JUnit 5 测试,但它会从对 TestContainers API 的任何调用中引发异常:class file for org.junit.rules.TestRule not found

POM.XML:

调用 TestContainers API 的示例 JUnit5 测试:

从 TestContainer 依赖项中排除Junit 4时,会检测到 JUnit5 测试,但添加对任何 TestContainers API 的调用会导致编译错误:

编译错误详情:

0 投票
0 回答
83 浏览

spring-webflux - Spring WebFlux 在使用 TestContainers 进行测试期间给出“间歇性错误”

我正在使用 SpringWebflux、Junit5、JAva11 和TestContainers来测试我的应用程序;

有时,会发生“间歇性”错误(当它发生时),它看起来像:

  • 我在数据库中创建并插入的对象,在测试之前,当我运行测试时,它会导致不同的对象 - 请参阅错误:

但是,对象是相同的,有时测试结果还可以,但有时会发生“这种间歇性错误”。

有人知道会发生什么吗?

那是我的完整测试代码

完整的“间歇性”错误是以下异常:

0 投票
1 回答
712 浏览

spring-boot - 使用 testcontainers 和 redis 的连接超时

我使用 Spring Boot、TestContainers、redis 和 Junit 5 进行集成测试。我遇到了一个奇怪的行为,当我进行所有集成测试时,我一直在显示这个日志:

无法重新连接到 [localhost:55133]:连接被拒绝:localhost/127.0.0.1:55133

这个例外:

但是我单独运行测试,我没有这种行为。

我使用 Junit5,我正在使用 Junit5 扩展来启动和停止我的 redis 容器:

我将此文件添加为我的集成测试的扩展:

谁能帮我解决这种情况。

0 投票
2 回答
4883 浏览

java - java.lang.IllegalStateException:找不到有效的 Docker 环境。请查看日志并检查配置

我有一个名为 myImageName:latest 的 docker 映像,我在我的应用程序中使用它。我想为我的应用程序编写一个集成测试,因此我想使用 TestContainer 包。当我运行以下简单测试时:

我收到以下错误(完整堆栈跟踪):

18:30:58.741 [main] 错误 org.testcontainers.dockerclient.DockerClientProviderStrategy - 找不到有效的 Docker 环境。请检查配置。尝试的配置是:2 18:30:58.746 [main] 错误 org.testcontainers.dockerclient.DockerClientProviderStrategy - UnixSocketClientProviderStrategy:失败,出现异常 NoClassDefFoundError(无法初始化类 org.testcontainers.shaded.com.github.dockerjava.core.DefaultObjectMapperHolder)18 :30:58.747 [main] 错误 org.testcontainers.dockerclient.DockerClientProviderStrategy - 由于未找到有效配置,因此无法继续执行

java.lang.IllegalStateException:找不到有效的 Docker 环境。请在 org.testcontainers 的 java.base/java.util.Optional.orElseThrow(Optional.java:408) 的 org.testcontainers.dockerclient.DockerClientProviderStrategy.lambda$getFirstValidStrategy$7(DockerClientProviderStrategy.java:215) 查看日志并检查配置。 dockerclient.DockerClientProviderStrategy.getFirstValidStrategy(DockerClientProviderStrategy.java:207) at org.testcontainers.DockerClientFactory.getOrInitializeStrategy(DockerClientFactory.java:136) at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:178) at org.testcontainers.LazyDockerClient.getDockerClient (LazyDockerClient.java:14) 在 org.testcontainers.LazyDockerClient.authConfig(LazyDockerClient.java:12) 在 org.testcontainers.containers.GenericContainer.start(GenericContainer.java:310) 在 org.

  • 码头工人 v20.10.5
  • junit v5.7
  • 测试容器 v1.15.3
  • JDK v11.0.10

先感谢您!

0 投票
1 回答
326 浏览

java - 在没有测试容器启动的情况下运行 SpringBootTest 上下文

我有 2 个父测试类:

这个想法是让各种测试类扩展这些类。需要模拟 MySQL 数据库的那些将扩展 UserApplicationIntegrationTest。不需要数据库连接但需要 Spring 上下文的将扩展 UserApplicationTest。

在没有 UserApplicationIntegrationTest 的情况下,所有扩展 UserApplicationTest 的测试类都运行良好,包括使用 Mockito 框架。不幸的是,当我介绍 UserApplicationIntegrationTest 及其子测试(与 dockerised db 实例完美配合)时,这些测试开始失败,因为它们突然需要数据源。

如果我尝试在应用程序属性或父类的注释中排除数据源自动配置,则 testcontainers 测试(那些扩展 UserApplicationIntegrationTest)开始失败,因为 Spring 上下文存在问题并且无法在这些测试中再自动装配 bean .

在我知道之前,我已经陷入了一个尝试混乱的排除/添加的兔子洞,这是我以前在以前的项目中遇到过的,它只会导致进一步的问题。

本质上,我希望在我的项目中共存 3 种类型的测试:

  1. 没有 Spring 上下文的单元测试
  2. 使用 Spring 上下文进行单元测试(包括大量模拟但仍然支持自动装配/构造函数注入)
  3. 使用 Spring 上下文进行集成测试,该上下文启动测试容器并允许我测试数据库交互(并可能进行端到端测试)

我想避免为所有 Spring 上下文测试启动 testcontainers 的最初原因(这将“工作”得很好,并且在构建过程中只包括 1 个 docker 延迟)是因为它让我不得不等待 mysql 连接到每次我在开发过程中在本地运行单独的 Spring 上下文测试时都会对实例进行 dockerised。

有没有一种简洁的方法来实现这一目标,或者有一种更好的方法来满足需求?

提前致谢。

0 投票
0 回答
1815 浏览

docker - 测试容器:FileNotFoundException:.testcontainers.properties

我在我的机器上运行我的应用程序的集成测试(使用JUnit5)时遇到问题。我的测试依赖于两个容器,我使用Testcontainers java library:和. 版本是.micronautWindows 10 ProRabbitMQMS SQL serverDockerv19.03.13

在运行集成测试时,我收到以下异常:

macOS虽然,从机器运行测试时我没有得到这个异常。我的假设是它是Windows具体的。

谁能告诉我如何解决它?我应该自己创建所需的文件吗?或者也许有一种方法可以在运行 IT 期间跳过读取此文件的步骤?