表格驱动测试

表格驱动测试的优势

  • 分离的测试数据和测试逻辑
  • 明确的出错信息
  • 可以部分失败
  • go 语言的语法使得我们更易实践表格驱动测试
func TestTriangle(t *testing.T) {

    tests := []struct{ a, b, c int} {

        {3, 4, 5},
        {5, 12, 13},
        {8, 15, 17},
        {12, 35, 0},
        {30000, 40000, 50000},
    }

    for _, tt := range tests {

        if actual := calcTriangle(tt.a, tt.b); actual != tt.c {
            t.Errorf("calcTriangle(%d, %d); " + "got %d; expected %d", tt.a, tt.b, actual, tt.c)
        }
    }
}

func calcTriangle(a, b int) int {

    var c int
    c = int(math.Sqrt(float64(a * a + b * b)))
    return c
}

benchmark 示例

这里我们不需要指定一个循环的循环次数,go 会帮我们做好的

func BenchmarkSubstr(b *testing.B) {

    s := "黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花"
    ans := 8

    for i := 0; i < b.N; i++ {

        actual := lengthOfNonRepeatingSubStr(s)
        if actual != ans {

            b.Errorf("got %d for input  %s;"+"expected %d", actual, s, ans)
        }
    }
}

命令行测试常用指令

运行测试文件

go test .

查看代码覆盖率

go tool cover -html=c.out

运行benchmark

 go test -bench .

查看cpu占用,来优化代码

go test -bench . -cpuprofile cpu.out
go tool pprof cpu.out
> web

查看文档

godoc -http: 6060

What doesn’t kill you makes you stronger.