测试
Go自带一个轻量级的测试框架testing,以及go test命令,用于实现单元测试和性能测试。testing与其他语言的测试框架类似,可以针对响应函数编写测试用例,也可以基于框架写相应的压力测试用例。可以从如下几个方面保证代码质量:
确保每个函数是可运行的,并且运行结果是正确的
确保写出的代码性能,
testing会展示每个测试用例执行的时间及时发现程序设计的逻辑错误,让问题尽早暴露
使用testing测试
testing测试使用案例
目标测试包结构,该包主要提供加减乘除四个方法:
cal
├── cal.go
├── cal_test.go
└── sub_test.gocal.go:
package cal
func Plus(a, b int) int {
return a + b
}
func Sub(a, b int) int {
return a - b
}
func Multi(a, b int) int {
return a * b
}
func Division(a, b int) int {
return a / b
}cal_test.go(针对加乘除三个函数测试):
sub_test.go(针对减法函数测试):
执行命令go test -v可以测试当前所在文件夹的包中的所有测试用例:
只打印测试失败结果
去除-v参数即可,如下测试就没有打印任何成功的测试用例:
针对某个测试文件测试
注意,一定要带上被测试的原文件:
针对某个测试函数测试
仅测试TestSub单元测试函数:
使用注意事项
测试文件必须以
_test.go结尾,前缀则不要求与源码文件相同测试函数必须以
Test开头,后缀通常是被测函数的名称(不是必需的),并且首字母必须大写,否则不会识别。比如TestDivision,TestDivisionByZero测试函数的参数必须为
t testing.T测试函数体中需要打印日志的情况可以使用
t.Logf方法打印如果出现错误,也就是不符合期望值,可以调用
t.Error(),t.Fatalf()等方法标记当前测试失败如果测试过程中发生异常,测试用例失败
testing的原理
testing的原理go test工具将测试文件cal_test.go引入到自己的main中在
main中调用所有的测试用例
类似如下伪代码:
goconvey
https://github.com/smartystreets/goconvey
特点:
测试代码优雅简洁
直接集成Go原生测试
全自动编译测试
详细展示测试结果以及覆盖率
高可读性的命令行输出结果
半自动化书写测试用例
安装:
使用案例
目标测试文件 calc.go:
创建测试文件 calc_test.go:
断言函数索引
Assertions · smartystreets/goconvey Wiki (github.com)
使用go test原生命令测试
使用go test -v,查看更详细的结果:
使用goconvey提供的工具测试

测试覆盖率,点击可以查看已覆盖以及未覆盖的go代码:


全自动编译测试
服务启动后,会在后台监测代码的变动并重新进行单元测试。如果自动编译测试不生效可以使用刷新按钮强制刷新
如果想要暂停自动编译测试,可以使用暂停按钮暂停

测试失败的展示

半自动化书写测试用例

最后更新于
这有帮助吗?