一、传统的方式对代码测试
在文件中创建一个
main
的函数
- 1、传统方式的写法
package main
import "fmt"
// 定义一个求和的方法
func sum(n int) int {
res := 0
for i := 0; i <= n; i++ {
res += i
}
return res
}
func main() {
res := sum(10)
if res != 55 {
fmt.Println("sum求和错误")
} else {
fmt.Println("sum求和正确")
}
}
- 2、使用
main
函数的缺点- 不方便,我们需要在
main
函数中去调用,这样就要去修改main
函数,如果项目正在运行中,只能停止项目 - 不利于管理,当我们测试多个函数或者多个模块的时候,都写在
main
函数中,不利于我们管理代码,感觉好臃肿 - 不能对代码性能的检测,不知道函数模块执行的时间
- 不方便,我们需要在
二、go
语言中的单元测试
- 1、介绍
Go
语言中自带有一个轻量级的测试框架testing
和自带的go test
命令来实现单元测试和性能测试,testing
框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例 - 2、使用单元测试的优点
- 确保每个函数是可运行,并且运行结果是正确的
- 确保写出来的代码性能是好的
- 单元测试能及时的发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让程序能够在高并发的情况下还能保持稳定。
三、在go
语言中单元测试快速入门
- 1、在刚刚的
go
代码同级的目录下创建一个xx_test.go
的文件
├── sum.go // 和上面的代码一样的
└── sum_test.go
- 2、
sum_test.go
代码
package main
import "testing"
func TestSum(t *testing.T) {
res := sum(10)
if res != 55 {
t.Fatalf("sum(10)不正确")
} else {
t.Logf("sum(10)正确")
}
}
- 3、在命令行运行
➜ test git:(master) ✗ go test -v # 执行的命令
=== RUN TestSum
--- PASS: TestSum (0.00s)
sum_test.go:10: sum(10)正确
PASS
ok github.com/dev/test 0.005s # 计算出这个方法执行的时间
➜ test git:(master) ✗
- 4、
go
语言中单元测试的总结- 测试用例的文件必须要以
fileName_test.go
结尾[fileName
根据需要测试的文件来写的] - 测试用例的函数必须以
Test
开头,一般来说就是Test+
被测试的函数名 - 测试用例的函数的参数是固定的
t *testing.T
- 一个测试用例中可以有多个测试函数
- 运行测试用例的指令
go test
:如果运行正确,无日志输出,错误的时候会输出日志go test -v
:运行正确或错误都会输出日志
- 当出现错误时,可以使用
t.Fatalf
来格式化输出错误信息,并退出程序 t.Logf
方法可以输出相应的日志PASS
表示测试用例运行成功,FAIL
表示测试用例运行失败- 如果文件夹下有很多文件,你仅仅是要测试单个文件的方法
- 测试用例的文件必须要以
go test -v xx_test.go xx.go
* 如果文件中有很多测试用例方法,仅仅是测试一个方法
go test -v -test.run 测试用例的函数