获得golang测试的分支覆盖率

时间:2016-05-21 13:38:51

标签: go

如果我们可以为golang测试获得分支覆盖,有人可以向我建议吗?假设我有一个golang代码,如下所示:

package main

import (
    "fmt"
)

func HelloWorld(name string, printv int) string {
    if name == "tuk" || printv == 1 {
        fmt.Println("Hello tuk")
        return "Hello tuk"
    } else {
        fmt.Println("Who are you?")
        return "Who are you?"
    }
}

相应的测试文件如下所示:

package main

import "testing"

func TestHelloWorld(t *testing.T) {
    r := HelloWorld("tuk", 0)
    if r != "Hello tuk" {
        t.Error("Test Failed")
    }
}

如果我执行下面的测试命令,它只是给我声明覆盖:

go test -coverprofile=cover.out .
ok      test    0.007s  coverage: 60.0% of statements

有没有办法可以获得分行报道?

2 个答案:

答案 0 :(得分:1)

从Go 1.11(2018年11月)开始,为覆盖only covers each block of statements生成的机器代码。应该有可能采用该代码并将其调整为覆盖表达式的每个分支。

the gobco project似乎确实做到了这一点,尽管仅适用于单个文件而不适用于整个软件包(同样,截至2018年11月)。

filed an issue查看Go团队是否认为分支机构覆盖值得。决定是使当前代码保持现在的简单,并做出决定had already been documented in the code itself

最后I forked the gobco project并添加了我需要的所有功能。

答案 1 :(得分:-1)

有一种方法可以显示实际测试代码的哪一部分see this blog for more information("查看结果"部分)

此解决方案可以集成到某个编辑器中(例如,带有go-plus插件的atom)。

希望得到这个帮助。