Go 测试模块
介绍 testing 包、测试函数约定、包级测试方式以及通过 -run 筛选测试用例。
文章目录
Go 测试模块
Go 语言通过 go test 命令和标准库的 testing 包提供内置测试能力。
Go 测试代码通常放在以 _test.go 结尾的文件中。测试函数名以 Test 开头,Test 后的第一个字符不能是小写字母,并接收一个 *testing.T 参数,例如:
// go-testing/add/add_test.go
package add
import (
"testing"
)
func TestAdd(t *testing.T) {
got := Add(2, 3)
want := 5
if got != want {
t.Errorf("want %d, but got %d", want, got)
}
}
假设 add_test.go 中测试的 Add 函数定义在同一包的 functions.go 中。
当你运行 go test add_test.go 时,Go 会按显式文件列表构建临时测试包,不会自动加入同目录的 functions.go,因此会因为找不到 Add 而报 undefined: Add。
日常测试应以包为单位运行。go test 会编译当前包需要的普通 .go 文件与 _test.go 文件;显式传单个文件会绕开正常的包级测试方式。
# 方式一:推荐,测试当前包
go test
# 方式二:显式指定当前包
go test .
# 方式三:手动列出文件(不推荐)
go test add_test.go functions.go
# 显示每个测试用例的执行详情
go test -v
go test 还支持通过 -run 选择测试用例,参数是用于匹配测试名称的正则表达式:
go test -v -run=. # 运行名称能被正则匹配的测试
go test -v -run=TestAdd # 运行名称中匹配 TestAdd 的测试
go test -v -run=^TestAdd$ # 只运行名称为 TestAdd 的测试
go test -v -run=^$ # 不运行普通测试函数
JARVIS · 当前文章
有哪里没看懂?可以只问这篇。
Jarvis 会限定在《Go 测试模块》及其公开关联内容中检索,并把引用定位回原文章节。