GO语言单元测试|青训营笔记

51 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 2 天

单元测试\color{#008000}{单元测试}

1. 引出

在编写代码过程中,会出现需要确认一个函数或一个模块的结果是否正确,而传统的测试方法需要我们在 main 函数中去调用,不方便也不利于管理,因此我们引出了单元测试,它可以很好的解决问题

2. 基本介绍

Go 语言中自带一个轻量级的测试框架 testing 和自带的 go test 命令来实现单元测试和性能测试(基准测试)

  • 通过单元测试,我们便可以及时的发现程序设计或实现的逻辑错误,从而定位和解决问题
  • 而性能测试(基准测试)的重点在于发现程序设计上的一些问题,让程序能够在高并发的情况下还能保持稳定

我们接下来主要来讲讲单元测试

3. 快速入门

需求:使用 GO 的单元测试,编写 addUpper 函数并对其进行测试

代码示例

// add.go 文件
func addUpper(n int) int {  // 被测试函数
	res := 0
	for i := 1; i < n; i++ {
		res += i
	}
	return res
}

// add.test.go 文件
func TestAddUpper(t *testing.T) {  // 编写测试用例, 测试函数 addUpper
	// 调用
	res := addUpper(10)
	if res != 55 {
		// fmt.Println("AddUpper(10) 执行错误")
		t.Fatalf("AddUpper(10) 执行错误, 期望值=%v 实际值=%v\n", 55, res) // 输出日志后退出
	}

	// 若正确, 则输出日志
	t.Logf("AddUpper(10) 执行错误")
}

运行结果

=== RUN   TestAddUpper
    add_test.go:13: AddUpper(10) 执行错误, 期望值=55 实际值=45

--- FAIL: TestAddUpper (0.00s)

FAIL

分析:testing 框架会将 xxx.test.go 的文件引入

main() { 调用 TestXxx() 函数 }

4. 具体细节说明

  1. 测试用例文件名必须以 _test.go 结尾,比如上面编写的 add_test.go,add 不是固定的

  2. 测试用例函数必须以 Test 开头,一般来说就是 Test + 被测试的函数名,比如 TestAddUpper,要注意的是 Test 后跟的第一个字母必须大写

  3. 测试用例函数的形参类型必须是 *testingT,如 TestAddUpper(t *tesingT)

  4. 一个测试用例文件中,可以有多个测试用例函数,比如 TestAddUpper、TestSub

  5. 当出现错误时,可以使用 tFatalf格式化输出错误信息,并退出程序

  6. tLogf 方法可以输出相应的日志

5. 总结

实际开发中,测试往往是避免事故的最后一道屏障!

参考: