我制作一个可以执行的makefile go test -cover。make unit_tests如果coverage小于X,是否有可能使命令失败?我该怎么办?
go test -cover
make unit_tests
您可以TestMain在测试中使用该功能。TestMain可以充当测试的自定义入口点,然后您可以调用testing.Coverage()以获取对覆盖率统计信息的访问。
TestMain
testing.Coverage()
因此,例如,如果您希望失败率低于80%,则可以将其添加到软件包的测试文件之一中:
func TestMain(m *testing.M) { // call flag.Parse() here if TestMain uses flags rc := m.Run() // rc 0 means we've passed, // and CoverMode will be non empty if run with -cover if rc == 0 && testing.CoverMode() != "" { c := testing.Coverage() if c < 0.8 { fmt.Println("Tests passed but coverage failed at", c) rc = -1 } } os.Exit(rc) }
然后go test -cover将调用此入口点,您将失败:
PASS coverage: 63.0% of statements Tests passed but coverage failed at 0.5862068965517241 exit status 255 FAIL github.com/xxxx/xxx 0.026s
请注意,testing.Coverage()返回的数字低于测试报告的数字。我看过代码,该函数计算覆盖率的方式与测试内部报告的方式不同。我不确定哪个更“正确”。