testing包
testing包提供了自动化测试相关的框架,测试源码文件的主名称通常已被测试源码文件的名字作为开头,文件名必须以xx_test.go结尾,例如我们的被测试源码文件名称是demo.go 那么我们测试源码文件名称应该是demo_test.go
功能测试test
1、测试方法样式是func Testxxx(t *testing.T),方法名词必须以Test开头,xxx首字母需要大写,func TestFoo(t *testing.T)
2、测试方法参数必须 t *testing.T,函数中通过调用testing.T的Error, Errorf和FailNow, Fatal, FatalIf等方法说明测试不通过,以error 打印函数不会终止测试,Fatal类型会造成该单元测试终止。
当然通过调用Log方法用来记录测试的信息。
示例:
import "testing" func TestFoo(t *testing.T) { t.Log("test") }
单元测试代码
func TestAdd(t *testing.T) { a := 1 b := 2 c := Add(a, b) if c != 3 { t.Fatalf("err:%d + %d =%d", a, b, c) } t.Logf("%d + %d =%d", a, b, c) } func TestSub(t *testing.T) { a := 10 b := 2 c := Sub(a, b) if c != 8 { t.Fatalf("err:%d - %d = %d", a, b, c) } t.Logf("%d - %d =%d", a, b, c) }
压力/性能测试benchmark
对于性能测试函数来说,其名称必须以Benchmark为前缀,并且唯一参数的类型必须是*testing.B类型的。
testing.B 拥有testing.T 的全部接口,同时还可以统计内存消耗,指定并行数目和操作计时器等
import "testing" func BenchmarkFoo(t *testing.B) { t.Log("Benchmark") }
性能测试
package testimport ( "bytes" "strings" "testing" ) func BenchmarkByte(t *testing.B) { b := bytes.Buffer{} b.WriteString("foo") for i := 0; i < t.N; i++ { b.String() } } func BenchmarkStr(t *testing.B) { s := strings.Builder{} s.WriteString("test") for i := 0; i < t.N; i++ { s.String() } }
go test 不会主动执行benchmark函数的,需要增建 -test_bench,所以下面的代码不会执行任何压力测试
go test bench_test.go ok command-line-arguments 0.001s [no tests to run]
go test bench_test.go -test.bench=".*" goos: linux goarch: amd64 BenchmarkByte-8 200000000 6.17 ns/op BenchmarkStr-8 2000000000 0.34 ns/op PASS ok command-line-arguments 2.577s ".*"表示测试全部的压力测试函数,执行当前测试文件的所有压力测试函数, 第一列表示被执行的测试函数,-8代表当前的cup执行核数, 第二列表示执行了总共次数, 第三列表示平均执行的耗时
执行单个的测试函数
go test bench_test.go -test.bench="Str" goos: linux goarch: amd64 BenchmarkStr-8 2000000000 0.34 ns/op PASS ok command-line-arguments 0.719s
go test
go test +包名,执行这个包下面的所有测试用例
go test +测试源文件,执行这个测试源文件里的所有测试用例
go test -run选项,执行只定的测试用例
本文地址:https://www.stayed.cn/item/235
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我