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中的单元测试和基准测试的主要内容,如果未能解决你的问题,请参考以下文章

4Go语言单元测试性能测试与监控

4Go语言单元测试性能测试与监控

4Go语言单元测试性能测试与监控

Go语言基础之单元测试

Go语言之基准测试

Go单元测试--模拟服务请求和接口返回