使用标志运行和调试单元测试:解决 Protobuf 扩展冲突
在 VS Code 中调试单元测试时,可能需要通过用于解决 Protobuf 扩展冲突的附加标志。本指南提供了此问题的解决方案,允许无缝调试。
VS Code settings.json 中的原始配置尝试添加所需的标志 '-ldflags "-X google.golang.org/protobuf/reflect /protoregistry.conflictPolicy=警告"'。但是,当 VS Code 生成标记周围带有单引号的测试命令时,此配置会遇到问题。
要解决此问题,需要调整 settings.json 中的配置。修改应删除标志值周围的单引号:
"go.testFlags": [ "-ldflags", "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" ]
通过此修改,VS Code 将生成一个测试命令,该命令正确包含必要的标志,而不会导致与 proto 扩展冲突相关的错误。
对于调试,建议使用不同的方法,因为使用 VS Code 界面调试特定测试的复杂性。使用特定标志编译测试二进制文件并利用 dlv 进行无头调试可以实现更好的控制和高效调试。
要编译测试二进制文件:
go test -c -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" -gcflags="all=-N -l"
此命令生成一个带有调试所需标志的二进制文件。要以无头模式连接 dlv 以进行编辑器连接:
dlv exec ./foo.test --headless --listen=:2345 --log --api-version=2 -- -count=1 -- $(pwd)/some/path
这里,foo.test是生成的二进制文件,-count=1表示用于测试的自定义标志,$(pwd)/some/path可用于黄瓜风格测试。将编辑器连接到 dlv 会话并开始调试。
其他信息
Go 还提供了通过内联标志启动 dlv 的便捷方法,对于 Vim 用户来说,vim -go 插件允许使用以下命令进行自定义断点设置和 dlv 连接:GoDebugConnect 127.0.0.1:2345。通过遵循上述步骤,开发人员可以有效地运行和调试带标志的单元测试,确保测试和代码维护的顺利进行。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3