3 回答
TA贡献1829条经验 获得超7个赞
基于这篇文章, 这是我所做的:
main_test.go使用此内容创建了一个:
package main
// code based on technique explained here:
// https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests
// you can look there if you want to see how not to execute this test
// when running unit test etc.
// This file is mandatory as otherwise the packetbeat.test binary is not generated correctly.
import (
"testing"
)
// Test started when the test binary is started. Only calls main.
func TestSystem(t *testing.T) {
main()
}
因为它是一个 Web 服务(因此处于无限循环中),所以我需要一种在 SIGTERM 上优雅退出的方法(而不会将其视为失败),所以我使用了该包go get gopkg.in/tylerb/graceful.v1并替换了(我使用go-restful) main.go 中的行
- log.Fatal(http.ListenAndServe(":"+port, nil))
+ graceful.Run(":"+port, 10*time.Second, nil)
然后我会像这样运行测试
go test -c -covermode=count -coverpkg ./... -o foo.test
./foo.test -test.coverprofile coverage.cov & echo $! > /tmp/test.pid
运行我的测试套件
kill "$(cat /tmp/test.pid)"
TA贡献2012条经验 获得超12个赞
你可能不想这样做。运行具有覆盖率、竞争检测和/或其他工具的代码会增加二进制文件的大小并使其变慢。在我的计算机上运行竞争检测器和代码覆盖率要慢 25 倍。
仅go test -cover -race
用于测试和go build
部署时。这将为您提供您想要的输出,尽管不是您想要的方式。
- 3 回答
- 0 关注
- 332 浏览
添加回答
举报