优秀的代码习惯一定是伴随着单元测试的,这也是go语言设计的哲学;
国外的很多公司很多优秀的程序员都比较重视TDD,但是在国内十分少见;(TDD:测试驱动开发(test driven devlopment))
无论如何,学习并使用golang的单元测试,不是浪费时间,而是让你的代码更加优雅健硕!
测试文件
文件名以_test.go
为后缀的文件均为测试代码,都会被go test
测试捕捉,不会被go build
编译;
测试函数
测试文件中的三种函数类型:
- 单元测试函数:函数名前缀
Test
;测试程序的逻辑 - 基准函数:函数名前缀
Benchmark
;测试函数的性能 - 示例函数:函数名前缀
Example
;会出现在godoc中的,为文档提供示例文档
测试命令
Go语言中的测试依赖go test
命令;在此命令下添加各种不同的参数以实现不同目的的测试;后面会一一介绍;
go test
命令会遍历所有的*_test.go
文件中符合上述命名规则的测试函数
;
然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件;
接下来分别介绍单元测试函数、基准函数、示例函数:
单元测试函数
-
单元测试函数的格式:
func TestName(t *testing.T) {}
- 函数的名字必须以
Test
开头,可选的后缀名必须以大写字母开头 - 每个测试函数必须导入
testing
包;关于testing包中的方法可以去看一下源码; - 参数
t
用于报告测试失败和附加的日志信息
-
一个简单的测试函数示例:将
输出的结果
与预期的结果
进行比较-
创建业务函数
// 文件split/split.go:定义一个split的包,包中定义了一个Split函数 package split import "strings" func Split(s, sep string) (result []string) { i := strings.Index(s, sep) for i > -1 { result = append(result, s[:i]) s = s[i+1:] i = strings.Index(s, sep) } result = append(result, s) return }
-
创建测试文件
// 文件split/split_test.go:创建一个split_test.go的测试文件 package split import ( "reflect" "testing" ) //
-