一、传统的方式对代码测试
在文件中创建一个
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 测试用例的函数
-