背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试.


UnitTest(单元测试)


单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。


main


GolangUnitTest


UnitTest的编写


注意:


xxx_test.go


Testxxx


t *testing.T


package




单元测试的运行


go testgo testgo help test


这里主要总结下几个常用的参数:


  • -args: 指定一些测试时的参数(可以指定超时时间,cpu绑定,压测等等(go test包含单元测试,压力测试等))


  • - -test.v: 是否输出全部的单元测试用例(不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例


  • - -test.run pattern: 只跑哪些单元测试用例


  • - -test.bench patten: 只跑那些性能测试用例


  • - -test.benchmem : 是否在性能测试的时候输出内存情况


  • - -test.benchtime t : 性能测试运行的时间,默认是1s


  • - -test.cpuprofile cpu.out : 是否输出cpu性能分析文件


  • - -test.memprofile mem.out : 是否输出内存性能分析文件


  • - -test.blockprofile block.out : 是否输出内部goroutine阻塞的性能分析文件


  • -c: 编译测试文件到pkg.test,但是不会运行测试程序


  • -exec xprog: 使用xprog参数来运行编译的测试文件(参数类似go run后的参数)


  • -i: 安装测试程序中的依赖包,但是不运行测试程序


  • -json: 以json格式输出测试结果


  • -o file: 指定测试程序编译后生成的文件名



单元测试中常用的命令参数:



单元测试注意事项


注意:


  • 1. 正常输入: 正常的可预测的测试用例


  • 2. 边界输入: 极端情况下的输入来测试容错性


  • 3. 非法输入: 输入异常数据类型,整个逻辑是否能够正常处理或者捕获


  • 4. 白盒覆盖: 需要设计的测试用例能够覆盖所有代码(语句覆盖、条件覆盖、分支覆盖、分支/条件覆盖、条件组合覆盖)



注意:util