Go语言学习笔记——单元测试


Golang单元测试

golang提供了标准库testing用来支持测试

import "testing"

Golang支持的测试种类

类型 格式 作用
单元测试 函数名前缀为Test 测试程序的一些逻辑行为是否正确
基准(压力)测试 函数名前缀为Benchmark 测试函数的性能
示例测试 函数名前缀为Example 为文档提供示例文档
模糊(随机)测试 函数名前缀为Fuzz 生成一个随机测试用例去覆盖认为测不到的各种赋值场景

单元测试

Go语言推荐测试文件和源代码文件放在一块,测试文件以_test.go结尾。

比如,当前package有calc.go一个文件,我们想测试calc.go中的AddMul函数,那么一个新建calc_test.go作为测试文件。

注意:创建项目后需要go mod init初始化项目

实例演示

calc.go

package main

func Add(a int, b int) int {
   
	return a + b
}

func Mul(a int, b int) int {
   
	return a * b
}

calc_test.go

package main

import "testing"

func TestADD(t *testing.T) {
   
	if ans := Add(1, 2); ans != 3 {
   
		t.Errorf("1 + 2 expected be 3, but %d got", ans)
	}

	if ans := Add(-10, -20); ans != -30 {
   
		t.Errorf("-10 + -20 expected be -30, but %d got", ans)
	}
}
  • 测试用例名称一般命名为Test加上待测试的方法名
  • 测试用的参数有且只有一个,在这里是t *testing.T
  • 基准测试(Benchmark)的参数是 *testing.B类型
  • TestMain的参数是 *testing.M类型

run test结果为:

Running tool: C:\Go\bin\go.exe test -timeout 30s -run ^TestADD$ go_pro

ok  	go_pro	0.272s

还可以在终端运行 go test,则该包下的所有测试用例都会被执行

PS E:\golang开发学习\go_pro> go test
PASS
ok      go_pro  0.244s

PASS表示测试用例运行成功,FAIL表示测试用例运行失败

或使用 go test -v-v参数会显示每个用例的测试结果,另外-cover参数可以查看覆盖率

PS E:\golang开发学习\go_pro> go test -v
=== RUN   TestADD
--- PASS: TestADD (0.00s)
PASS
ok      go_pro  0.245s
PS E:\golang开发学习\go_pro> go test -cover
PASS
coverage: 50.0% of statements
ok      go_pro  0.417s

如果只想运行其中一个用例,例如TestADD,可以用-run参数指定,该参数支持通配符*,和部分正则表达式,如^$

PS E:\golang开发学习\go_pro> go test -run TestADD -v  
=== RUN   TestADD
--- PASS: TestADD (0.00s)
PASS
ok      go_pro  0.180s

单元测试框架提供的日志方法

方法 作用
Log 打印日志,同时结束测试
Logf 格式化打印日志,同时结束测试
Error 打印错误日志,同时结束测试
Errorf 格式化打印错误日志,同时结束测试
Fatal 打印致命日志,同时结束测试
Fatalf 格式化打印致命日志,同时结束测试

子测试(Subtests)

子测试是Go语言内置支持的,可以在摸个测试用例中,根据测试场景使用t.Run创建不同的子测试用例

calc_test.go

func TestMul(t *testing.T) {
   
	t.Run("pos", func(t *testing.T) {
   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值