如果覆盖率低于特定百分比,则单元测试失败

时间:2018-05-01 16:46:14

标签: go makefile

我创建一个执行go test -cover的makefile。如果覆盖率低于X,是否可能使make unit_tests命令失败?我该怎么办?

1 个答案:

答案 0 :(得分:9)

您可以在测试中使用TestMain来执行此操作。 TestMain可以作为测试的自定义入口点,然后您可以调用testing.Coverage()来访问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()返回的数字低于测试报告的数字。我查看了代码,函数计算的覆盖范围与测试的内部报告不同。我不确定哪个更“正确”。