go语言学习笔记 — go工具(6.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表示测试用时

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格式化打印致命日志,同时结束测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值