您现在的位置 :

首页  >  企业新闻 >  > 正文

VScode 中golang 单元测试,解决单元测试超时timeout30s

时间 :2023-08-01 18:29:41   来源 : 博客园

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

提示:解决单元测试超时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 -vxxx_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

标签:

推荐文章

X 关闭

X 关闭