golang-单元测试
golang提供了非常方便的单元测试方法,本文就为大家梳理一下golang中单元测试的方法以及注意事项。
1. 代码示例
先来看一个案例
//创建一个文件名:operation_test.go 的文件
package main
import "testing"
//一个简单的相加返回结果的函数
func AddUpper(n int) int {
res := 0
for i := 1; i <= n; i++{
res += i
}
return res
}
//对AddUpper执行测试
func TestAddUpper(t *testing.T){
res := Test_addUpper(10)
if res != 55{
t.Fatalf("执行错误")
}
t.Log("正确")
}
程序运行结果:
=== RUN TestAddUpper
--- PASS: TestAddUpper (0.00s)
operation_test.go:10: 正确
PASS
2. 基本介绍
golang中的单元测试是通过轻量级的测试框架testing
和自带的go test
命令来实现单元测试和性能测试。官方中文文档
单元测试的目的:
- 确保编写的函数是可以运行的,而且逻辑结果是正确的
- 确保函数性能在预期范围
在刚接触单元测试时我也有同样的疑惑,这东西好像也没什么用?但是后来在写项目的过程中发现当程序功能逐渐复杂,调用部分逐渐增多时,良好接口测试就显示出了巨大的威力。还需要大家在项目中不断体会。
3. 细节与注意事项
- 测试用例文件名必须以 _test.go 结尾。
- 测试用例函数必须以
Test
开头,一般来说就是 Test+被测试的函数名,比如TestAddUpper
。而且Test后接的字母必须是大写。 TestAddUpper(t *tesing.T)
的形参类型必须是*testing.T
。- 一个测试用例文件中,可以有多个测试用例函数。
- 运行指令
go test [-v]
。加-v会不管正确和错误都输出日志。 - 当出现错误时,可以使用
t.Fatalf
来格式化输出错误信息,并退出程序 t.Logf
方法可以输出相应的日志。PASS
表示测试用例运行成功,FAIL
表示测试用例运行失败。- 测试单个文件,一定要带上被测试的原文件
go test -v add_test.go add.go
。 - 测试文件并不需要放在
main
包下,只要保证被测试函数所在的包和单元测试在同一包下即可