go开发需要了解的测试基础 - yellia1989/learn-doc GitHub Wiki

Go自带了测试框架和工具,在testing包中,以便完成单元测试(T类型)和性能测试(B类型)。
一般测试代码放在*_test.go文件中,与被测代码放于同一个包中。

单元测试

测试函数名称格式是:Test[^a-z],即以Test开头,跟上非小写字母开头的字符串。每个测试函数都接受一个*testing.T类型参数,用于输出信息或中断测试。

测试可用的一般函数

  1. func (c *T) Error(args ...interface{})

  2. func (c *T) Errorf(format string, args ...interface{})
    Log+Fail

  3. func (c *T) Fail()
    标识这个test case失败,但是继续往下执行

  4. func (c *T) FailNow()
    标识这个test case失败,不会往下执行,直接执行下一个test case

  5. func (c *T) Fatal(args ...interface{})

  6. func (c *T) Fatalf(format string, args ...interface{})
    Log+FailNow

  7. func (c *T) Log(args ...interface{})

  8. func (c *T) Logf(format string, args ...interface{})
    使用go test -v 会打印出来

  9. func (c *T) Skip(args ...interface{})

  10. func (c *T) SkipNow()

  11. func (c *T) Skipf(format string, args ...interface{})
    跳过当前的test case,进入下一个

关于并行

  • Run方法会开启一个新的携程执行新的测试用例,父携程会在调用Run方法处阻塞等待子携程退出后继续向下执行
  • 如果父携程不希望阻塞,则可以在子携程开头调用Parallel方法,这样父携程会继续执行测试用例到结束但不退出携程,子携程会在父携程测试用例结束后继续执行,父携程会等待子携程结束后再结束。 测试例子

go test 参数

-run 控制执行的测试函数
-v 显示log信息
更多参数 参考 https://golang.org/cmd/go/#hdr-Testing_flags

性能测试

性能测试函数以Benchmark 开头,参数类型是 *testing.B,可与Test函数放在同个文件中。默认情况下,go test不执行Benchmark测试,必须用“-bench ”指定性能测试函数。

go test 参数

-bench 执行测试函数
-benchtime 设置每个测试函数的测试时间,默认为1s
更多参数 参考 https://golang.org/cmd/go/#hdr-Testing_flags

⚠️ **GitHub.com Fallback** ⚠️