0


go单元测试

一、go单元测试介绍

     单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。

    单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

二、单元测试使用

1、要开始一个单元测试,需要准备一个 go 源码文件,在命名文件时需要让文件必须以_test结尾。

2、单元测试源码文件可以由多个测试用例组成,每个测试用例函数需要以Test为前缀

func TestXXX( t *testing.T )

3、测试用例文件不会参与正常源码编译,不会被包含到可执行文件中。

4、测试用例文件使用 go test 指令来执行,没有也不需要 main() 作为函数入口。所有在以_test结尾的源码内以Test开头的函数会自动被执行。

5、测试用例可以不传入 *testing.T 参数

6、新建的测试文件一般和源文件 放同一目录

7、go单元测试,引入包 testing

示例:

//待测文件hello.go
package main
import "fmt"

func Hello() string {
   return "hello world"
}

func main(){
   fmt.Print(Hello())
}

//测试文件hello_test.go
package main
import "testing"

func TestHello(t *testing.T) {

   a:= Hello()
   if a != "hello world" {
      t.Error("不通过")
   }
}

1、单元测试命令

//1、单个文件进入到测试文件所在目录
go test hello_test.go hello.go
ok      command-line-arguments  (cached)

//2、如果该目录有go.mod存在,直接 go test
>go test
PASS
ok      hello   3.634s

PASS 表示测试成功

2、运行指定单元测试用例

go test 指定文件时默认执行文件内的所有测试用例。可以使用-run参数选择需要的测试用例单独执行

//以下文件还有多个测试用例

package code11_3
import "testing"

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

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

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

这里指定 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: AK
PASS
ok          command-line-arguments        0.003s

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

3、标记单元测试结果

当需要终止当前测试用例时,可以使用 FailNow

func TestFailNow(t *testing.T) {
    t.FailNow()
}

还有一种只标记错误不终止测试的方法,代码如下:

func TestFail(t *testing.T) {
    fmt.Println("before fail")
    t.Fail()
    fmt.Println("after fail")
}

测试结果如下:

=== RUN   TestFail
before fail
after fail
--- FAIL: TestFail (0.00s)
FAIL
exit status 1
FAIL        command-line-arguments        0.002s

从日志中看出,第 3 行调用 Fail() 后测试结果标记为失败,但是第 4 行依然被程序执行了。

4、单元测试日志

    每个测试用例可能并发执行,使用 testing.T 提供的日志输出可以保证日志跟随这个测试上下文一起打印输出。testing.T 提供了几种日志输出方法,详见下表所示。

方 法

备 注

Log

打印日志,同时结束测试

Logf

格式化打印日志,同时结束测试

Error

打印错误日志,同时结束测试

Errorf

格式化打印错误日志,同时结束测试

Fatal

打印致命日志,同时结束测试

Fatalf

格式化打印致命日志,同时结束测试

标签: 单元测试

本文转载自: https://blog.csdn.net/demored/article/details/123983265
版权归原作者 勤天 所有, 如有侵权,请联系我们删除。

“go单元测试”的评论:

还没有评论