go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架
Posted Locutus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架相关的知识,希望对你有一定的参考价值。
单元测试是指,是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,如C语言中指一个函数,Java中指一个类,图形化软件中指一个窗口或菜单等。总的来说,单元是认为规定的最小可测试功能模块,单元测试是在软件开发过程中要进行的最低级别测试活动,独立单元与程序的其他部分相隔离情况下测试。
1. 注意点
- go单元测试源文件必须以
_test.go
结尾,自动执行其中所有以func TestXXX(t *testing.T)
开头的函数 - 一个单元测试文件可以包含多个测试用例函数
func TestXXX(t *testing.T)
,作为测试入口 - 测试用例不会参与正常编译,不会包含到可执行文件中
- 使用
go test
来执行测试用例,没有也不需要main()函数作为程序入口 - 测试用例函数可以不传入*testing.T参数
- 使用t.Log()打印字符串
package helloworld
import "testing"
func TestHelloWorld(t *testing.T) {
t.Log("hello world")
}
2. 单元测试命令行
// 执行单元测试文件中所有的测试用例(函数),-v表示可视化
# go test -v helloworld_test.go
=== RUN TestHelloWorld // 运行TestHelloWorld测试用例函数
hello world
--- PASS: TestHelloWorld (0.00s)
PASS // 测试成功
ok command-line-arguments 0.006s
测试通过,command-line-arguments是测试用例需要用到的一个包名,0.006s表示测试用时。
注:如果执行测试过程中,出现"FAIL command-line-arguments [build failed] ./getinfo_test.go:34:23: undefined: touch",表示go代码测试文件有其他依赖,需要像
go test -v go_test.go lib.go
一样,在go代码测试文件之后加上其他依赖代码。
3. 运行指定单元测试用例
# go test -v -run TestXXX XXX_test.go
go test默认执行go测试源文件的所有测试用例,可以使用-run参数选择执行指定的测试用例。
package go_test
import "testing"
func TestA(t *testing.T) {
t.Log("A")
}
func TestAK(t *testing.T) {
t.Log("AK47")
}
func TestB(t *testing.T) {
t.Log("B")
}
func TestC(t *testing.T) {
t.Log("C")
}
测试用例TestA和TestAK都被执行,原因是-run跟随的测试用例名称支持正则表达式。使用-run TestA$可以只执行TestA测试用例。
# go test -v -run TestA select_test.go
=== RUN TestA
--- PASS: TestA (0.00s)
select_test.go:6: A
=== RUN TestAK
--- PASS: TestAK (0.00s)
select_test.go:10: AK47
PASS
ok command-line-arguments 0.006s
4. 标记单元测试结果
使用t.FailNow()终止当前测试用例。
func TestFailNow(t *testing.T) {
t.FailNow()
}
使用t.Fail()只标记错误,不终止单元测试
func TestFail(t *testing.T) {
fmt.Println("before fail")
t.Fail()
fmt.Println("after fail")
}
5. 单元测试日志
单元测试可能并发执行,有必要跟踪打印这个测试上下文的输出。
方法 | 备注 |
---|---|
t.Log | 打印日志,同时结束测试 |
t.Logf | 格式化打印日志,同时结束测试 |
t.Error | 打印错误日志,同时结束测试 |
t.Errorf | 格式化打印错误日志,同时结束测试 |
t.Fatal | 打印致命日志,同时结束测试 |
t.Fatalf | 格式化打印致命日志,同时结束测试 |
以上是关于go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 基础 — go工具:编译 —— go build
go语言学习笔记 — 基础 — go工具:编译并安装 —— go install
go语言学习笔记 — 基础 — go工具:编译后运行 —— go run
go语言学习笔记 — 基础 — go工具:一键获取源代码,编译并安装 —— go get