go - 无法生成 go 覆盖文件
问题描述
我尝试在本文中运行 sytemTest: https ://www.elastic.co/blog/code-coverage-for-your-golang-system-tests
所以首先按照提示创建一个名为 main_test.go 的系统测试文件,如下所示:
func TestSystem(t *testing.T) {
t.Logf("systemtest mod=%v", *SystemTest)
if *SystemTest {
t.Log("runing system test....")
main()
}
}
执行此单元测试时,将执行整个 main 函数
然后我建立一个测试二进制文件:
go test -c -covermode=count -coverpkg ./... -o main.test
并在我的测试环境中执行测试二进制文件
./main.test -systemTest -test.coverprofile ./coverage.cov
因为程序会监听并等待客户的请求,所以除非我手动退出,否则它不会退出,这意味着不会生成coverprofile
所以我启动了一个计时器在 15 秒后停止程序......但是当程序退出时,封面配置文件仍然没有生成
如果test不调用main,则可以正常生成coverprofile
查看主要功能
var mkrtExitWait sync.WaitGroup
var mkrtExitCode int
var mkrtRunning bool = false
func MKrtRun() int {
mkrtExitWait.Add(1)
mkrtRunning = true
mkrtExitWait.Wait()
return mkrtExitCode
}
func MKrtExit(code int) {
if !mkrtRunning {
os.Exit(code)
} else {
mkrtRunning = false
mkrtExitCode = code
mkrtExitWait.Done()
}
}
func main() {
// listen and serve code
......
if *SystemTest { // a command flag
go func(){
time.Sleep(time.Second * 10)
MKrtExit(0)
}()
}
MKrtRun()
}
我尝试了一些方法来生成覆盖文件,但它不起作用:
发送客户端请求,告诉测试服务器在程序运行时执行 os.Exit(0)
在程序运行时发送客户端请求告诉测试服务器执行 panic()
杀死进程强制退出程序
有什么问题?
如何生成覆盖文件?
解决方案
为我解决了这个问题(并在@darkwing 的回答中提到)是标志顺序。
当我放置第-test.coverprofile=coverage.cov
一个时,它起作用了,并且创建了coverage.cov 文件。
注意:我必须=
在标志名称和值之间添加符号。
此外,我不需要在不同的 go 例程中运行它。
推荐阅读
- excel - 使用excel公式跟踪跳过的步骤
- javascript - 如何显示不同的文本布尔 json
- reactjs - 在 setState 中使用 async-await
- flutter - '_route == ModalRoute.of(context)': 不正确
- python - 返回最常见的元素作为字符串而不是列表 python
- android - Android Studio Navigation:从上方菜单栏捕获导航返回事件
- python - 解析来自 JSON URL 的信息后,如何在 if-else 语句中不打印多次就结束 for 循环
- git - 如何使用 Jenkins 管道将代码合并回 Github
- reactjs - react-i18next / i18n 遵循什么语言代码的 ISO 标准?
- flutter - 将 GridView 添加到列表视图的末尾