Go中的单元测试和基准测试
Posted mcmx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go中的单元测试和基准测试相关的知识,希望对你有一定的参考价值。
单元测试:测试程序在各种数据下的准确性
基准测试(压力测试):测试程序的速度及弹性
testing包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能
测试文件必须满足 *_test.go这种格式*代表源文件的名字(测试代码和业务代码分开了)
_test程序不会被普通的Go编译器编译。只有gotest会编译所有的程序(普通和测试)
测试文件(测试源代码)中必须导入import testiong
测试函数必须以TestZzz为格式(Zzz是函数名,如TestAdd(t *testing.T))
T是传给测试函数的结构类型,用来管理测试状态,支持格式化测试日志,t.Log,t.Error,t.ErrorF
以下函数用来通知测试失败:
func (t *T)Fail()//标记为失败,并继续执行
func (t *T) FailNow()//标记为失败并终止此文件的执行,继续下一个文件
func (t *T) Log(args ...interface)//args 被用默认的格式格式化并打印到错误日志。
func (t *T) Fatal(args ...interface)//先执行第三个,在执行第二个(上面两个的综合)
go test来编译测试程序,并执行程序中所有的TestZzz函数,所有的测试都通过会打印出PASS
gotest可以接收多个go文件作为参数,并指定选项。结合 --chatty或-v选项,每个执行的测试函数以及测试状态会被打印。
例如 go test fmt_test.go --chatty
testing包中有一些类型和函数可以用来做简单的基准测试:测试代码中必须包含BenchmarkZzz
以Benchmark开头,并接收一个 *testing.B的类型的参数
go test -test.bench=.* 会运行所有的基准测试函数。(代码中的函数会被调用N次,并展示N的值和函数执行的平均时间,单位为ns。如果使用testing.Benchmark调用这些函数,只会直接运行)
package even
import "testing"
func TestEven(t *testing.T)
for num := 0;num <=100 ;num++
if Even(num)
t.Log("is a Even")
else
t.FailNow()
func TestOdd(t *testing.T)
for num := 0;num<= 100 ;num++
if Odd(num)
t.Log("is a odd")
else
t.Log("is.t a odd")
package even
func Even(i int)bool
if i%2 == 0
return true
else
return false
func Odd(i int)bool
if i%2 == 0
return false
else
return true
单元测试:
对于测试程序来说,go test 包名 会直接运行包内所有的_test.go文件,以及这些文件各自所含有的TestXxx函数。(注意是自动执行,相当于执行主函数一样,执行结束之后转而执行下一个。类似于主函数吧。并在控制台打印函数里要打印的。注意,不需要主函数,这是个测试框架testing)
基准测试:
func BenchmarkEven(b *testing.B)
for num := 0;num <=100 ;num++
num := 101
Even(num)
fmt.Println("asdf")
func BenchmarkOdd(b *testing.B)
num := 100
Odd(num)
fmt.Println("asdfasdf")
以上是关于Go中的单元测试和基准测试的主要内容,如果未能解决你的问题,请参考以下文章