go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架相关的知识,希望对你有一定的参考价值。

单元测试是指,是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,如C语言中指一个函数,Java中指一个类,图形化软件中指一个窗口或菜单等。总的来说,单元是认为规定的最小可测试功能模块,单元测试是在软件开发过程中要进行的最低级别测试活动,独立单元与程序的其他部分相隔离情况下测试。

1. 注意点

  • go单元测试源文件必须以_test.go结尾,自动执行其中所有以func TestXXX(t *testing.T)开头的函数
  • 一个单元测试文件可以包含多个测试用例函数func TestXXX(t *testing.T),作为测试入口
  • 测试用例不会参与正常编译,不会包含到可执行文件中
  • 使用go test来执行测试用例,没有也不需要main()函数作为程序入口
  • 测试用例函数可以不传入*testing.T参数
  • 使用t.Log()打印字符串
package helloworld

import "testing"

func TestHelloWorld(t *testing.T) {
   t.Log("hello world")
}

2. 单元测试命令行

// 执行单元测试文件中所有的测试用例(函数),-v表示可视化
# go test -v helloworld_test.go

=== RUN   TestHelloWorld  // 运行TestHelloWorld测试用例函数
hello world
--- PASS: TestHelloWorld (0.00s)
PASS                                 // 测试成功
ok      command-line-arguments  0.006s 

测试通过,command-line-arguments是测试用例需要用到的一个包名,0.006s表示测试用时。

注:如果执行测试过程中,出现"FAIL command-line-arguments [build failed] ./getinfo_test.go:34:23: undefined: touch",表示go代码测试文件有其他依赖,需要像go test -v go_test.go lib.go一样,在go代码测试文件之后加上其他依赖代码。


3. 运行指定单元测试用例

# go test -v -run TestXXX XXX_test.go

go test默认执行go测试源文件的所有测试用例,可以使用-run参数选择执行指定的测试用例。

package go_test

import "testing"

func TestA(t *testing.T) {
	t.Log("A")
}

func TestAK(t *testing.T) {
	t.Log("AK47")
}

func TestB(t *testing.T) {
	t.Log("B")
}

func TestC(t *testing.T) {
	t.Log("C")
}

测试用例TestA和TestAK都被执行,原因是-run跟随的测试用例名称支持正则表达式。使用-run TestA$可以只执行TestA测试用例。

# go test -v -run TestA select_test.go 

=== RUN   TestA
--- PASS: TestA (0.00s)
    select_test.go:6: A
=== RUN   TestAK
--- PASS: TestAK (0.00s)
    select_test.go:10: AK47
PASS
ok      command-line-arguments  0.006s

4. 标记单元测试结果

使用t.FailNow()终止当前测试用例。

func TestFailNow(t *testing.T) {

    t.FailNow()
    
}

使用t.Fail()只标记错误,不终止单元测试

func TestFail(t *testing.T) {

    fmt.Println("before fail")
    
    t.Fail()
    
    fmt.Println("after fail")
}

5. 单元测试日志

单元测试可能并发执行,有必要跟踪打印这个测试上下文的输出。

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

以上是关于go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 基础 — go工具:编译 —— go build

go语言学习笔记 — 基础 — go工具:编译并安装 —— go install

go语言学习笔记 — 基础 — go工具:编译后运行 —— go run

go语言学习笔记 — 基础 — go工具:一键获取源代码,编译并安装 —— go get

go语言学习笔记 — 基础 — go工具:性能分析,发现代码性能问题的具体位置 —— go pprof

go语言学习笔记 — 基础 — go工具(5.2): 基准测试 (性能测试)—— 获得代码内存占用和运行效率的性能数据