go test
功能,提高了开发和测试的效率。
下面例子的文件结构如下:
goTest使用/add.go goTest使用/test_add.go
add.go
package goTest使用
import "fmt"
func Add(a, b int) int {
return a+b
}
func What() {
fmt.Println("what ?")
}
add_test.go
package goTest使用
import (
"testing"
"fmt"
)
func TestAdd(t *testing.T) {
r := Add(1,2)
fmt.Println(r)
}
func TestWhat(t *testing.T) {
What()
}
进入两个文件所在的目录下,如
zhangqiangdeMac-mini:Test zhqmac$ cd goTest使用/
执行 go test
命令
zhangqiangdeMac-mini:goTest使用 zhqmac$ go test
控制台输出:
3 //Add()结果
what ? //What()结果
PASS
ok zhqGo/Test/goTest使用 0.007s
测试某个函数
go test 命令,默认运行所有在目录下xxx_test.go 的测试文件
而且只对以Testxxx(t tesing.T)的函数进行测试,要单测某个函数,如Add()
可以使用命令
go test -test.run Add
或
go test -test.run TestAdd
测试单个文件
go test -v add_test.go add.go
测试前初始化
进行测试之前需要初始化操作(例如打开连接),测试结束后,需要做清理工作(例如关闭连接)等等。这个时候就可以使用TestMain()。
package goTest使用
import (
"testing"
"fmt"
)
func TestAdd(t *testing.T) {
r := Add(1,2)
fmt.Println(r)
}
func TestWhat(t *testing.T) {
What()
}
func TestMain(m *testing.M) {
//初始化操作
fmt.Println("begin")
m.Run()
fmt.Println("end")
}
参数说明
1、运行参数
- go test 忽略log信息
- go test -v 冗长模式, 打印实时的log信息
2、测试过程控制
t.Log
t.Logf
// 正常信息t.Error
t.Errorf
// 测试失败信息t.Fatal
t.Fatalf
// 致命错误, 测试程序退出的信息t.Fail
//当前测试标记为失败t.Failed
//查看失败标记t.FailNow
// 标记失败, 并终止当前测试函数的执行(需要注意的是,我们只能在运行测试函数的Goroutine中调用 //t.FailNow方法,而不能在我们在测试代码创建出的Goroutine中调用它。t.Skip
//调用t.Skip方法相当于先后对t.Log和t.SkipNow方法进行调用,而调用t.Skipf方法则相当于先后对 //t.Logf和t.Skip-Now方法进行调用。方法t.Skipped的结果值会告知我们当前的测试是否已被忽略。t.Parallel
// 标记为可并行运算
参考资料
go test 初始化— TestMain的使用
https://www.cnblogs.com/lanyangsh/p/8685989.html