芹菜是一根葱
专业解决各种前端Bug,吊打各种面试官

目的:单元测试的主要目的是验证代码的每个单元(函数、方法)是否按照预期工作。

提示:解决单元测试超时30s的问题在序号4

1 准备以_test.go结尾文件和导入testing

在命名文件时需要让文件必须以_test结尾,在文件中导入testing包。单元测试源码文件可以由多个测试用例组成,每个测试用例函数需要以Test为前缀

func TestXXX(t *testing.T)

(1) 测试用例文件不会参与正常的源码编译,不会被包含到可执行文件中;

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

(3) 测试用例可以不传入*testing.T参数。

测试代码如下:

注意:程序需要有go.mod文件,终端输入命令go mod init module即可生成

 1  package main
 2  import (     
 3     "testing"
 4     "fmt"
 5     "time"
 6 )  
 7 func Test_Log(t *testing.T) {
 8     t.Log("hello world")
 9     t.Log("hello world jkjk")
10     fmt.Println("==============Test_Log===============") 
11 }
12 func Test_World(t *testing.T) {
13     t.Log("start")  time.Sleep(1 * time.Second)
14     t.Log("1s")
15     start := time.Now()
16     time.Sleep(10000 * time.Microsecond)
17     elapsed := time.Since(start)
18     fmt.Println(elapsed)
19     fmt.Println("==============Test_World===============")
20 }

 

2 终端输入命令进行golang单元测试

(1) go test -v 执行项目中所有的单元测试文件

在终端输入命令:go test -v,执行单元测试并打印详情,PASS表示测试用例运行成功,FAIL表示测试用例运行失败;OK表示执行完成,并且可以看到执行的时长。

 

(2) go test -v xxx_test.go执行指定单元测试文件

当项目中有多个要执行的测试文件时,可以执行指定单元测试文件,如在终端输入命令:go test -v time_test.go

 

 (1) go test -run xxx -v 执行指定单元测试函数

当测试文件有多个测试函数执行,可以执行指定单元测试函数,如在终端输入命令:

go test -run Test_World -v

3 VScode测试进行golang单元测试

点击VScode视图左侧的测试按钮,点击module展开,可以看到项目的管理文件,点击对应文件的运行测试按钮执行单元测试,如点击module的运行测试按钮则执行所有文件的单元测试,也可以点击打开文件中测试函数的运行测试按钮执行单元测试。

 

 单元测试执行完成后会出现绿色打钩的执行完成图标。点击视图和更多操作按钮(...),点击清除所有结果则执行完成图标消失。

在进行单元测试的过程中,可以点击取消测试运行按钮取消测试。

4   解决golang单元测试超时30s

测试代码如下:

 1  package main
 2  import (     
 3     "testing"
 4     "fmt"
 5     "time"
 6 )  
 7 func Test_Log(t *testing.T) {
 8     t.Log("hello world")
 9     t.Log("hello world jkjk")
10     fmt.Println("==============Test_Log===============") 
11 }
12 func Test_World(t *testing.T) {
13     t.Log("start")  time.Sleep(25 * time.Second)
14     t.Log("25s")
15     start := time.Now()
16     time.Sleep(10000 * time.Microsecond)
17     elapsed := time.Since(start)
18     fmt.Println(elapsed)
19     fmt.Println("==============Test_World===============")
20 }

如果是在终端输入命令:go test -v进行单元测试,执行单元测试的程序总时长超过30s时也能够正常运行。

 

 如果是在VScode的测试中点击运行测试按钮进行单元测试时,执行30s之前的测试函数,超过30s的测试函数则会跳过。

 更改go test的超时时长:

(1) 点击VScode左下方的管理图标按钮

(2) 点击设置

(3) 在搜索区域输入:go test timeout

(4) Go:test timeout 输入框输入超时时长,如:1h

 再次点击运行测试按钮执行单元测试,测试文件都能顺利执行,并且可以看到设置的超时时长1h

 

 

posted on 2023-08-01 18:28  芹菜是一根葱  阅读(1734)  评论(1编辑  收藏  举报