小编Tze*_*qah的帖子

如何调试在 docker 容器中运行的 maven surefire 测试?

我有一个包含集成测试的 Maven 项目,我使用了surefire插件。我可以运行测试

mvn clean package
Run Code Online (Sandbox Code Playgroud)

这工作正常。我还可以使用 Intellij 远程调试集成测试。为此,我执行

mvn clean package -Dmaven.surefire.debug
Run Code Online (Sandbox Code Playgroud)

在 Intellij 中,我创建了一个“远程”类型的运行/调试配置,将主机设置为 localhost,将端口设置为 5005。控制台一打印

Listening for transport dt_socket at address: 5005
Run Code Online (Sandbox Code Playgroud)

我在 intellij 中启动远程调试,一切正常。

问题是我想在 docker 容器内执行集成测试,尤其是在容器内调试它们。我已经用 java、maven 和我的应用程序需要的所有其他东西创建了一个 docker 镜像。在入口点我启动我的应用程序,然后我开始集成测试

mvn clean package -Dmaven.surefire.debug
Run Code Online (Sandbox Code Playgroud)

在 docker 容器内。我使用选项运行 docker 容器

-p 5005:5005
Run Code Online (Sandbox Code Playgroud)

打开该端口以进行远程调试。运行容器时,在某些时候我可以看到控制台输出

Listening for transport dt_socket at address: 5005
Run Code Online (Sandbox Code Playgroud)

但是当我在 intellij 中启动远程调试器时,它不会连接而是给我以下错误消息

Error running '...':
Unable to open debugger port (localhost:5005): java.net.SocketException "Connection reset"
Run Code Online (Sandbox Code Playgroud)

如果我再次尝试启动调试器,我会收到错误消息

Unable to open debugger port (localhost:5005): java.net.IOException "handshake failed - …
Run Code Online (Sandbox Code Playgroud)

debugging integration-testing intellij-idea maven-surefire-plugin docker

2
推荐指数
1
解决办法
1042
查看次数