如何通过launch.json传递Go测试命令行参数进行调试?
Go测试在VS Code中无法通过launch.json传递命令行参数
我有一个Go测试用例在控制台运行正常,但通过VS Code的launch.json配置时,始终无法正确传递命令行参数。
控制台正常执行的命令
当前工作目录:/Users/me/workspace/tests/e2e
go test -run TestRankingExperiment -args -n LOCAL
运行正常
两次失败的launch.json尝试
尝试1
配置内容:
{ "name": "Rerank Experiment", "type": "go", "request": "launch", "mode": "test", "program": "${workspaceFolder}/tests/e2e", "args": ["-run TestRankingExperiment -args -n LOCAL"] }
错误结果:flag provided but not defined: -run TestRankingExperiment -args -n LOCAL
尝试2
配置内容:
{ "name": "Rerank Experiment", "type": "go", "request": "launch", "mode": "test", "program": "${workspaceFolder}/tests/e2e", "env": {}, "args": ["-run", "TestRankingExperiment", "-args", "-n", "LOCAL"] }
错误结果:flag provided but not defined: -run
背景说明
TestRankingExperiment 是 tests/e2e/ranking_experiment_test.go 中的测试用例,该测试是依赖测试包装器的e2e测试,无法直接运行,tests/e2e/main_test.go 参与了测试逻辑。
解决方案
在VS Code的Go调试配置中,mode: test 时,-run 属于Go测试的内置参数,不需要放在args数组里,需用testRun字段单独指定;-args之后的测试用例参数,直接放在args数组中(无需包含-args)。
正确的launch.json配置如下:
{ "name": "Rerank Experiment", "type": "go", "request": "launch", "mode": "test", "program": "${workspaceFolder}/tests/e2e", "testRun": "TestRankingExperiment", "args": ["-n", "LOCAL"] }
配置说明
testRun:对应控制台命令中的-run TestRankingExperiment,指定要运行的测试用例名称args:仅放置测试用例自身需要的命令行参数,也就是控制台命令中-args之后的内容
这样配置后,调试器会自动组装出和控制台一致的测试命令,即可正常运行测试。
内容的提问来源于stack exchange,提问作者tyler124
相关产品推荐
相关产品推荐

