golang自带了测试包(testing),直接可以进行单元测试、性能分析、输出结果验证等。简单看着官方文档试了试,总结一下:
目录结构和命令
使用golang的测试包,需要遵循简单的目录结构
测试代码放在待测试代码的目录下(一个包内),以_test.go结尾,例如如下目录结构,MyTest目录下有待测试的代码文件MyTest.go和测试代码MyTest_test.go
.|-- bin| `-- main|-- pkg| `-- darwin_amd64| `-- MyTest.a`-- src |-- MyTest | |-- MyTest.go | `-- MyTest_test.go `-- main `-- main.go
直接在MyTest目录下执行go test命令即可,go test包含很多选项,可以参考Golang手册相关部分
基本的测试函数
待测试的MyTest.go源码如下:
package MyTestimport ( "fmt")type MyStruct struct { name string}func GetFieldValue(x *MyStruct) string { value := x.name return value}func SetFieldValue(x *MyStruct, value string) { fmt.Println("SetFieldValue()") x.name = value}
对于MyTest_test.go,首先自然是要导入golang的测试包:
package MyTestimport testing
基本的测试函数以Test开头,后面接的字符串,第一个字符必须是数字或者大写,例如:
func TestMytest(t *testing.T) { var st MyStruct SetFieldValue(&st, "hello") val := GetFieldValue(&st) if val != "hello" { t.Error("Set Field") }}
T是testing包里定义的一个结构体,其包含了名为common的接口,提供了很多格式化输出的功能,golang提供了自动检查与调用测试函数的机制,测试函数的执行逻辑则需要编写者自行完成。
执行go test 结果为:
Call SetFieldValue()PASSok /go/src/MyTest 0.004s