如何在VSCode中调试Maven测试?Spring Boot集成测试调试难题
解决Spring Boot集成测试调试端口连接不上的问题
以下是几个实用的解决方案:
修改调试参数为
suspend=y
把原来的启动参数改成:mvn test -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9000这样JVM启动后会暂停执行,直到调试器(比如VSCode)连接到9000端口。控制台会输出类似
Listening for transport dt_socket at address: 9000的提示,这时你再去VSCode里配置调试连接,连上后测试才会开始运行,完全不用担心速度太快赶不上。在测试代码中添加延迟或断点
如果你不想修改启动参数,可以在测试类的初始化方法或者第一个测试方法开头加一段延迟:@BeforeAll static void setUp() throws InterruptedException { // 给5秒时间连接调试端口 Thread.sleep(5000); }或者直接在VSCode中给测试方法打断点,即使测试开始执行,走到断点处也会自动暂停,这时候再连接调试端口就行。不过要注意延迟时间得足够,避免还没连上测试就跑完了。
配置Maven Surefire插件传递调试参数
如果你的集成测试是通过Maven Surefire插件fork新进程执行的,命令行的调试参数可能没传递到子进程里。可以在pom.xml中配置插件,把调试参数加到fork的JVM中:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <configuration> <forkCount>1</forkCount> <reuseForks>true</reuseForks> <argLine>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9000</argLine> </configuration> </plugin>之后直接执行
mvn test,测试进程就会等待调试连接,不用每次命令行输入参数。VSCode中配置自动调试流程
在VSCode的.vscode/launch.json里添加一个调试配置,让它先启动Maven测试任务再自动连接端口:{ "version": "0.2.0", "configurations": [ { "type": "java", "name": "Debug Maven Test", "request": "attach", "hostName": "localhost", "port": 9000, "preLaunchTask": "maven test" } ] }然后在
.vscode/tasks.json中添加对应的Maven测试任务:{ "version": "2.0.0", "tasks": [ { "label": "maven test", "type": "shell", "command": "mvn test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9000", "args": [], "problemMatcher": [] } ] }这样启动调试时,VSCode会自动先运行Maven测试,同时立刻尝试连接9000端口,完美解决时间差问题。
内容的提问来源于stack exchange,提问作者user2316219
相关产品推荐
相关产品推荐

