# 测试整个目录 go test -v ./pkg/... ./cmd/... -coverprofile cover.out
# 测试某个文件 go test -v file_test.go file.go
# 测试某个函数 go test -v -test.run TestFunction
4. 示例
4.1. 源文件getest.go
1 2 3 4 5 6 7 8 9 10
package gotest import ( "errors" ) funcDivision(a, b float64)(float64, error) { if b == 0 { return0, errors.New("除数不能为0") } return a / b, nil }
4.2. 测试文件gotest_test.go
1 2 3 4 5 6 7
funcTest_Division_2(t *testing.T) { if _, e := Division(6, 0); e == nil { //try a unit test on function t.Error("Division did not work as expected.") // 如果不是如预期的那么就报错 } else { t.Log("one test passed.", e) //记录一些你期望记录的信息 } }
5. 压力测试
压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似。
压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
1
func BenchmarkXXX(b *testing.B) { ... }
go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench,语法:-test.bench="test_name_regex",例如go test -test.bench=".*"表示测试全部的压力测试函数
在压力测试用例中,请记得在循环体内使用testing.B.N,以使测试可以正常的运行
文件名也必须以_test.go结尾
5.1. 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package gotest import ( "testing" ) funcBenchmark_Division(b *testing.B) { for i := 0; i < b.N; i++ { //use b.N for looping Division(4, 5) } } funcBenchmark_TimeConsumingFunction(b *testing.B) { b.StopTimer() //调用该函数停止压力测试的时间计数 //做一些初始化的工作,例如读取文件数据,数据库连接之类的, //这样这些时间不影响我们测试函数本身的性能 b.StartTimer() //重新开始时间 for i := 0; i < b.N; i++ { Division(4, 5) } }