GO随笔-单元测试-基础测试
单元测试
前几天,Leader让我学习GO单元测试并且组内分享。经过这些天在网上查阅资料和实践。总结出以下内容。
基础知识:
GO为我们提供了测试框架,go test
,让我们能够很容易的进行单元测试。
但必须遵守以下几点规则:
- 测试文件必须以_test.go结尾
- 单元测试文件名_test.go前面的部分
最好
是被测方法所在go文件的文件名。(不一样也可以运行go test,但是应该遵守统一的规范) - 单元测试的函数必须以Test开头,是公开函数
- 测试函数必须接收一个指向testing.T类型的指针(依测试目的而定,如主要是测试性能,则用testing.B等),并且不能返回任何值。
- 函数名最好是Test+测试函数名(依测试类型而定,Benchmark等)。
只要遵守以上规则,很容易可以编写一个GO单元测试。
在网上查阅资料时,看到有一篇文章写道:
测试代码的文件放置的位置可以随意?
顿时感觉GO真的好智能,迫不及待的尝试了一下:
难道需要指定路径?
可能是我没有理解这句话的含义,但我个人感觉,还是放在一个目录(包)下吧。package
也可以随意写?
尝试后结论,不能。
写一个简单的单元测试用例
add.go
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") } } }
运行结果
能够清楚看到每组测试结果。这种形式能够轻易添加测试用例。
相关推荐
蛰脚踝的天蝎 2020-11-10
Cocolada 2020-11-12
TuxedoLinux 2020-09-11
snowphy 2020-08-19
83540690 2020-08-16
lustdevil 2020-08-03
83417807 2020-07-19
张文倩数据库学生 2020-07-19
bobljm 2020-07-07
83417807 2020-06-28
86427019 2020-06-28
86427019 2020-06-25
zhengzf0 2020-06-21
tobecrazy 2020-06-16
宿命java 2020-06-15
83417807 2020-06-15
84284855 2020-06-11