如果我们可以为我的 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?"
}
}
Run Code Online (Sandbox Code Playgroud)
相应的测试文件如下所示:
package main
import "testing"
func TestHelloWorld(t *testing.T) {
r := HelloWorld("tuk", 0)
if r != "Hello tuk" {
t.Error("Test Failed")
}
}
Run Code Online (Sandbox Code Playgroud)
如果我执行下面的测试命令,它只是给我语句覆盖率:
go test -coverprofile=cover.out .
ok test 0.007s coverage: 60.0% of statements
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让我也获得分支机构的覆盖范围吗?
从 Go 1.11(2018 年 11 月)开始,生成的覆盖范围机器代码仅覆盖每个语句块。应该可以采用该代码并对其进行调整以覆盖表达式的每个分支。
看起来gobco 项目确实做到了这一点,尽管只是针对单个文件而不是整个包(同样,截至 2018 年 11 月)。
我提出了一个问题,看看 Go 团队认为分支覆盖是否值得。我们的决定是保持当前代码像现在一样简单,并且该决定已经记录在代码本身中。
最后我分叉了 gobco 项目并添加了我需要的所有功能。