本节将演示如何编写表驱动测试,收集测试覆盖率并对其进行改进。还将使用 github.com/cweill/gotests 包来生成测试。 如果你一直在下载其他章节的测试代码,这些代码应该看起来非常熟悉。使用本节与前几节的测试组合,应该能够实现100%的测试覆盖率。

实践

获取第三方库:

go get github.com/cweill/gotests/

建立 coverage.go:

package main

import "errors"

// Coverage 是一个具有一些分支条件的简单函数
func Coverage(condition bool) error {
    if condition {
        return errors.New("condition was set")
    }
    return nil
}

建立 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)
            }
        })
    }
}

填充TODO部分:

{"no condition", args{true}, true},

运行测试:

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%的测试覆盖率,在这样的情况下,模糊测试会变得很有用。

最后编辑: kuteng  文档更新时间: 2021-01-03 15:03   作者:kuteng