一尘不染

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

go

我制作一个可以执行的makefile go test -covermake unit_tests如果coverage小于X,是否有可能使命令失败?我该怎么办?


阅读 320

收藏
2020-07-02

共1个答案

一尘不染

您可以TestMain在测试中使用该功能。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()返回的数字低于测试报告的数字。我看过代码,该函数计算覆盖率的方式与测试内部报告的方式不同。我不确定哪个更“正确”。

2020-07-02