1.基本介绍
go语言自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,通过单元测试,可以解决如下问题:
●确保每个函数是可运行的,并且运行结果是正确的
● 确保写出来的代码性能是好的
●单元测试能及时发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让程序在高并发下还能保持稳定
2.快速入门
创建cal.go
package cal
//一个被测试的函数
func addUpper(n int) int {
res := 0
for i := 0; i < n+1; i++ {
res += i
}
return res
}
//求两个数的和
func getSub(n1 int, n2 int) int {
return n1 - n2
}
创建cal_test.go
package cal
import (
"fmt"
"testing" //go的testing框架包
)
//测试addUpper是否正确
func TestAddUpper(t *testing.T) {
//调用
res := addUpper(10)
if res != 55 {
t.Fatalf("addUpper(10)执行错误,期望值=55 实际值=%v\n", res)
}
//如果正确,输出日志
t.Logf("addUpper(10)执行正确")
}
func TestGetSub(t *testing.T) {
res1 := getSub(20, 10)
fmt.Println("正确", res1)
}
使用go test -v 执行
正确的结果:
错误的结果
3.入门总结
- 测试用例文件名必须以 _test.go结尾,比如cal_test.go,cal不是固定的
- 测试用例必须以Test开头,一般来说就是TestXxx,第一个字母不能是[a-z],比如TestAddUpper
- TestAddUpper(t *testing T)的形参类型必须是 *testing.T
- 一个测试用例文件中,可以有多个测试用例函数
- go test 如果运行正确,无日志,错误时,会输出日志
- go test -v 运行正确或错误都输出日志
- 当出现错误时,可以使用 Fatalf 来格式化输出错误信息,并退出程序。调用 Fatalf 相当于在调用 Logf 之后调用 FailNow 。FailNow会停止执行该函数
- t.Logf方法可以输出相应的日志
- 测试用例函数,并没有放在main中也执行了,这就是测试用例方便之处
- PASS表示测试用例运行成功,FAIL表示测试用例运行失败
- 测试单个文件,一定要带上被测试的原文件:go test -v cal_test.go cal.go
- 测试单个方法:go test -v -test.run TestAddUpper