单元测试
单元测试
Golang的测试依赖于 ==go test== 命令,测试文件一般来说以 ==xxx_test.go== 格式,其中的代码不会被go build编译到最终的可执行文件中
==xxx_test.go== 文件中有三种类型的函数
类型 | 格式 | 作用 |
---|---|---|
测试函数 | 函数名前缀为Test | 测试程序的一些逻辑i行为是否正确 |
基准函数 | 函数名前缀为Benchmark | 测试函数的性能 |
示例函数 | 函数名前缀为Example | 为文档提供示例文档 |
单元测试函数
一般来说来goland中创建一个文件名字格式为 x_test.go ,编译器就会自动把他变成测试函数的类型,如果你的函数名字格式写成 TestFunction 开头,自动会生成相应的形式,非常方便
1 | func TestName(t *testing.T){ |
其中 t 用于报告测试失败和附加的日志信息
1 | func (c *T) Error(args ...interface{}) |
命令:
go test
单元测试示例
1 | package t |
1 | package t |
1 | // output: |
总结
其实上面的被测试案例是有问题的,但是因为我们的测试案例过于少且特殊,因此我们需要注意测试的时候案例足够权威全面
回归测试
如果测试中发现有个测试用例是错误的,然后你修改了代码
之后你应该把之前所有的测试用例都再重新测试一遍,而不是只测试之前错误的测试用例
跳过测试用例
为了节省时间可以跳过一些麻烦的测试用例
1 | func TestSplit(t *testing.T) { |
1 | // output : |
子测试
可以为每一个测试数据编写一个测试函数
1 | func TestXXX(t *testing.T){ |
表格驱动测试
看着比较高大上,其实就是定义一个测试用例表格,然后遍历表格,并使用==t.Run==对每个条目进行测试
并行测试
并行测试
1 | for _, tt := range tests { |
测试覆盖率
覆盖率是指 被测试套件覆盖的百分比,一般来说就是语句的覆盖率,即测试中至少被运行一次的代码占总代码的比例,一般来说要达到百分之八十
go test -cover
go test -cover -coverprofile= fileName 记录输出到文件总
好用的测试库
Monkey
testify 一个超级的断言工具
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Echin の 博客!