Go代码测试覆盖率
-
目录结构
├── main.go └── main_test.go
-
代码
// main.go package main import "fmt" func Divide(a, b float64) (float64, error) { if b == 0 { return 0, fmt.Errorf("division by zero is not allowed") } return a / b, nil } // main_test package main import "testing" func Test_Divide(t *testing.T) { testCases := []struct { a float64 b float64 expected float64 shouldFail bool }{ {10.0, 2.0, 5.0, false}, {15.0, 3.0, 5.0, false}, } for _, tc := range testCases { result, err := Divide(tc.a, tc.b) if tc.shouldFail { if err == nil { t.Errorf("Expected an error for %f/%f but got none", tc.a, tc.b) } } else { if err != nil { t.Errorf("Unexpected error for %f/%f: %s", tc.a, tc.b, err) } if result != tc.expected { t.Errorf("Expected %f/%f to be %f, but got %f", tc.a, tc.b, tc.expected, result) } } } }
-
执行以下命令,生成文件c.out
go test -coverprofile=c.out
-
执行以下命令,会自动打开浏览器
go tool cover -html=c.out
-
会看到以下结果