测试

Go自带一个轻量级的测试框架testing,以及go test命令,用于实现单元测试性能测试testing与其他语言的测试框架类似,可以针对响应函数编写测试用例,也可以基于框架写相应的压力测试用例。可以从如下几个方面保证代码质量:

  1. 确保每个函数是可运行的,并且运行结果是正确的

  2. 确保写出的代码性能,testing会展示每个测试用例执行的时间

  3. 及时发现程序设计的逻辑错误,让问题尽早暴露

使用testing测试

使用案例

目标测试包结构,该包主要提供加减乘除四个方法:

cal
├── cal.go
├── cal_test.go
└── sub_test.go

cal.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单元测试函数:

使用注意事项

  1. 测试文件必须以_test.go结尾,前缀则不要求与源码文件相同

  2. 测试函数必须以Test开头,后缀通常是被测函数的名称(不是必需的),并且首字母必须大写,否则不会识别。比如TestDivisionTestDivisionByZero

  3. 测试函数的参数必须为t testing.T

  4. 测试函数体中需要打印日志的情况可以使用t.Logf方法打印

  5. 如果出现错误,也就是不符合期望值,可以调用t.Error(),t.Fatalf()等方法标记当前测试失败

  6. 如果测试过程中发生异常,测试用例失败

testing的原理

  1. go test工具将测试文件cal_test.go引入到自己的main

  2. main中调用所有的测试用例

类似如下伪代码:

goconvey

https://github.com/smartystreets/goconvey

特点:

  1. 测试代码优雅简洁

  2. 直接集成Go原生测试

  3. 全自动编译测试

  4. 详细展示测试结果以及覆盖率

  5. 高可读性的命令行输出结果

  6. 半自动化书写测试用例

安装:

使用案例

目标测试文件 calc.go

创建测试文件 calc_test.go

断言函数索引

Assertions · smartystreets/goconvey Wiki (github.com)

使用go test原生命令测试

使用go test -v,查看更详细的结果:

使用goconvey提供的工具测试

image-20211215103054231

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

image-20211215103354337
image-20211215103443087

全自动编译测试

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

  2. 如果想要暂停自动编译测试,可以使用暂停按钮暂停

image-20211215103731421

测试失败的展示

image-20211215104026964

半自动化书写测试用例

image-20211215104423294

最后更新于

这有帮助吗?