前几天,Leader让我学习GO单元测试而且组内分享。通过这些天在网上查阅资料和实践。总结出如下内容。框架
基础知识:
GO为咱们提供了测试框架,go test
,让咱们可以很容易的进行单元测试。
但必须遵照如下几点规则:函数
最好
是被测方法所在go文件的文件名。(不同也能够运行go test,可是应该遵照统一的规范)只要遵照以上规则,很容易能够编写一个GO单元测试。性能
在网上查阅资料时,看到有一篇文章写道:单元测试
测试代码的文件放置的位置能够随意?
顿时感受GO真的好智能,火烧眉毛的尝试了一下:学习
难道须要指定路径?测试
多是我没有理解这句话的含义,但我我的感受,仍是放在一个目录(包)下吧。package
也能够随意写?
尝试后结论,不能。spa
写一个简单的单元测试用例
add.go3d
package add func Add(a, b int) int{ return a+b }
add_test.go指针
package add import "testing" func TestAdd(t *testing.T){ if sum:=Add(1,2); sum!=3{ t.Error("fail")//日志通常要写成f(x)=y, want z的形式 } else { t.Log("success") } }
go test -v
便可看到测试结果日志
(这里有一点我踩过的小坑,当想指定测试文件的时候go test file_test.go
会报错,由于须要后面还须要接上被测试的文件:go test file_test.go file.go
)
只是一个最简单的基本测试。另外一种测试方法叫作:表组测试。其实就是多个基本测试。
将上面test简单改造
package add import "testing" func TestAdd(t *testing.T){ var tests = []struct{ date []int want int }{ {[]int{1, 2}, 3}, {[]int{2, 5}, 7}, {[]int{3, 9}, 11}, } for _,v := range tests{ if sum:=Add(v.date[0], v.date[1]); sum!=v.want{ t.Errorf("Add(%d, %d) = %d, want %d", v.date[0], v.date[1], v.date[0]+v.date[1], v.want) } else { t.Log("success") } } }
运行结果可以清楚看到每组测试结果。这种形式可以轻易添加测试用例。