## 使用表驱动测试 本节将演示如何编写表驱动测试,收集测试覆盖率并对其进行改进。还将使用 github.com/cweill/gotests 包来生成测试。 如果你一直在下载其他章节的测试代码,这些代码应该看起来非常熟悉。使用本节与前几节的测试组合,应该能够实现100%的测试覆盖率。 ### 实践 1. 获取第三方库: ``` go get github.com/cweill/gotests/ ``` 2. 建立 coverage.go: ``` package main import "errors" // Coverage 是一个具有一些分支条件的简单函数 func Coverage(condition bool) error { if condition { return errors.New("condition was set") } return nil } ``` 3. 建立 coverage_test.go: 运行 ``` gotests -all -w ``` 这会生成: ``` package main import "testing" func TestCoverage(t *testing.T) { type args struct { condition bool } tests := []struct { name string args args wantErr bool }{ //TODO } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if err := Coverage(tt.args.condition); (err != nil) != tt.wantErr { t.Errorf("Coverage() error = %v, wantErr %v", err, tt.wantErr) } }) } } ``` 4. 填充TODO部分: ``` {"no condition", args{true}, true}, ``` 5. 运行测试: ``` go test -cover PASS coverage: 66.7% of statements ok github.com/agtorre/go-cookbook/chapter8/coverage 0.007s ``` ``` go test -coverprofile=cover.out go tool cover -html=cover.out -o coverage.html ``` 打开coverage.html可以看到覆盖率报告。 ### 说明 go test -cover命令附带一个基本的Go安装。它可用于收集Go应用程序的测试覆盖率报告。此外,它还能够输出覆盖率指标和HTML覆盖率报告。此工具通常由其他工具包装,将在下一节中介绍。 https//github.com/golang/go/wiki/TableDrivenTests 涵盖了这些表驱动的测试样例,可以在不编写大量额外代码的情况下完成可以处理许多情况的干净测试。 首先自动生成测试代码,然后根据需要填写测试用例以帮助创建更多的覆盖范围。在调用非变量函数或方法时,或测试输入和输出的许多变化,可能很难达到100%的测试覆盖率,在这样的情况下,模糊测试会变得很有用。 * * * * 学识浅薄,错误在所难免。欢迎在群中就本书提出修改意见,以飨后来者,长风拜谢。 Golang中国(211938256) beego实战(258969317) Go实践(386056972)