如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。[更多文章在我博客] coderdao.github.io
表达从简单开始, 那么我们先举个例子:
预设需要 业务文件(被测试
的脚本)
编写与之对应的 测试脚本
接着进入 需要测试的 package 包目录路径
, 运行 go test
命令
$ go test -v === RUN TestMult --- PASS: TestMult (0.00s) PASS ok demo 0.006s
将启动当前路径下的所有测试用例
(文件名以 _test.go 结尾); 添加 -v
参数可以查看测试用例详细运行信息
。
以上就是一个简约但完整的 单元(功能)测试用例
。
测试命令格式: go test [build/test flags] [packages] [build/test flags & test binary flags]
go test
命令会自动匹配指定路径
下(默认为:当前路径)文件命名为 *_test.go
的包测试文件
, 将被编译为单独的包,与主测试二进制文件
链接并运行;
名称以_
(包括_test.go
)或.
开头的文件将会被忽略。
go 工具将忽略名为testdata
的目录,使其可用保存测试所需的辅助数据。
本地目录模式
发生在 go test 时,不带包参数调用(例如,‘go test’ 或 ‘go test -v’)。
在这种模式下, go test 编译包源并在当前目录中找到测试,然后运行结果测试二进制。
在这种模式下,缓存(下面讨论)被禁用。包测试完成后, go test 打印一个摘要行显示测试状态(‘ok’ 或 ‘FAIL’)、包名称和已用时间时间。
包列表模式
发生在在调用 go test 时带有显式包参数(例如“go test math”、“go test ./…”,甚至“go test .”)。在这种模式下, go test 编译并测试命令行上列出的每个包。
仅在包列表模式下,go test 缓存成功的包测试, 避免不必要的重复运行测试。
测试的结果可以从缓存中恢复,go test 会重新显示之前的输出而不是运行测试二进制文件
再次。发生这种情况时, go test 打印 ‘(cached)’ 代替摘要行中的已用时间。当运行命令有添加参数:-cpu
、-list
、-parallel
、-run
、-short
、-v
测试结果将会被缓存。显式禁用测试缓存的常用方法是使用-count=1
。
Golang
自带 testing
测试包,调用它就能自动完成单元测试
、性能测试
、验证结果
。
而项目开发过程中完整的单元测试
, 能够在 功能上线
、新环境部署
等常见业务场景, 大大提高发现、重现、定位问题
的效率。尤其是在大且复杂
的项目中更是 减少线上故障、异常出现
的有效手段。
Golang testing 包提供了 3 种测试: 单元(功能)测试
、性能(压力)测试
、覆盖率测试
。
共同的编写要点有:
_test.go
结尾import "testing"
多个测试用例(函数)组成
不会参与
正常源码编译,不会被包含在可执行文件内go test -v
单元测试以
Test
开头,(t *testing.T)作为参数
,后面第一个字母必须大写
(例如 TestAbc())
go test -bench="."
性能测试以
Benchmark
开头,(t *testing.B)做为参数
,后面第一个字母必须大写
(例如 TestAbc())
go test -cover
覆盖率测试
可以获知 测试程序 共覆盖
多少业务代码(也就是 demo_test.go 中测试了多少 demo.go 中的代码),最好是覆盖100%
。
$ go test -cover PASS coverage: 100.0% of statements ok demo 0.006s