searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

go单元测试

2023-10-09 08:29:14
11
0

1. 环境

- p4环境,sde docker

- go语言环境,1.19

2. 什么是单元测试

 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验

证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函

数、方法、类、功能模块或者子系统。

Go 语言的单元测试默认采用官方自带的测试框架,通过引入 testing 包以及

执行 `go test` 命令来实现单元测试功能。

在源代码包目录内,所有以 `_test.go` 为后缀名的源文件会被 `go

test` 认定为单元测试的文件,这些单元测试的文件不会包含在 `go

build` 的源代码构建中,而是单独通过 go test 来编译并执行。

3. 单元测试编写流程

3.1. 测试用例的形式:

- 测试函数的函数名必须以大写的 Test 开头,后面紧跟的函数名,要么是大

写开头,要么就是下划线,比如 `func TestName(t *testing.T)` 或

者 `func Test_name(t *testing.T)` 都是 ok 的, 但是 `func

Testname(t *testing.T)`不会被检测到- TestXxxx(t *testing.T) // testing 包 T-普通测试用例

- T 结构内部是继承自 common 结构, common 结构提供集中方法

- 常用的方法:

  1. 打印信息: log/logf
  2. 测试用例失败,打印信息,但是测试用例继续:error/errorf
  3. 测试用例失败,打印信息,测试用例中断:fatal/fatalf

- 通常情况下,需要将测试文件和源代码放在同一个包内。一般测试文件的命

名,都是 `{source_filename}_test.go`,比如我们的源代码文件是

cntl.go ,那么就会在 cntl.go 的相同目录下,再建立一个 cntl_test.go

的单元测试文件去测试 cntl.go 文件里的相关方法。

3.2. 对测试接口需要用到的用例进行初始化

- 用于测试的用例需要多样化,能够覆盖到接口中的所有会发生的状况

3.3. 调用被测试的接口,做好 err 检查

3.4. 对调用接口的结果进行 assert 判断

"github.com/stretchr/testify/assert"

- assert.Equal(t, a, b),检查a和b是否相同- assert.Error(t, err),测试特殊用力如需要返回error的情况,判断err

是否为error

- 如果需要判断返回string的内容,可以使用strings.Contains和

assert.equal配合使用,利用fmt指定string中特定的参数

3.5 需要的时候使用 gomonkey 对测试接口进行打桩

"github.com/agiledragon/gomonkey/v2"

- gomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本

的完成打桩,从而将精力聚焦于业务功能的开发。

- 调用applyFunc对指定接口进行打桩,修改指定接口的返回值

- writeEntries 接口的返回值已经变更为0,fmt.Errorf(stubErrStr),可

以对其进行测试

-在测试完之后,一定要对patch进行reset

- ApplyPrivateMethod 可以为私有方法打桩

3.6 单项单元测试的最后必须要把所有添加的用例删除,释放内存

3.7 go test -cover XXXX 进行测试(XXXX为文件名,例:cntl_test.go)

0条评论
作者已关闭评论
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
原创

go单元测试

2023-10-09 08:29:14
11
0

1. 环境

- p4环境,sde docker

- go语言环境,1.19

2. 什么是单元测试

 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验

证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函

数、方法、类、功能模块或者子系统。

Go 语言的单元测试默认采用官方自带的测试框架,通过引入 testing 包以及

执行 `go test` 命令来实现单元测试功能。

在源代码包目录内,所有以 `_test.go` 为后缀名的源文件会被 `go

test` 认定为单元测试的文件,这些单元测试的文件不会包含在 `go

build` 的源代码构建中,而是单独通过 go test 来编译并执行。

3. 单元测试编写流程

3.1. 测试用例的形式:

- 测试函数的函数名必须以大写的 Test 开头,后面紧跟的函数名,要么是大

写开头,要么就是下划线,比如 `func TestName(t *testing.T)` 或

者 `func Test_name(t *testing.T)` 都是 ok 的, 但是 `func

Testname(t *testing.T)`不会被检测到- TestXxxx(t *testing.T) // testing 包 T-普通测试用例

- T 结构内部是继承自 common 结构, common 结构提供集中方法

- 常用的方法:

  1. 打印信息: log/logf
  2. 测试用例失败,打印信息,但是测试用例继续:error/errorf
  3. 测试用例失败,打印信息,测试用例中断:fatal/fatalf

- 通常情况下,需要将测试文件和源代码放在同一个包内。一般测试文件的命

名,都是 `{source_filename}_test.go`,比如我们的源代码文件是

cntl.go ,那么就会在 cntl.go 的相同目录下,再建立一个 cntl_test.go

的单元测试文件去测试 cntl.go 文件里的相关方法。

3.2. 对测试接口需要用到的用例进行初始化

- 用于测试的用例需要多样化,能够覆盖到接口中的所有会发生的状况

3.3. 调用被测试的接口,做好 err 检查

3.4. 对调用接口的结果进行 assert 判断

"github.com/stretchr/testify/assert"

- assert.Equal(t, a, b),检查a和b是否相同- assert.Error(t, err),测试特殊用力如需要返回error的情况,判断err

是否为error

- 如果需要判断返回string的内容,可以使用strings.Contains和

assert.equal配合使用,利用fmt指定string中特定的参数

3.5 需要的时候使用 gomonkey 对测试接口进行打桩

"github.com/agiledragon/gomonkey/v2"

- gomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本

的完成打桩,从而将精力聚焦于业务功能的开发。

- 调用applyFunc对指定接口进行打桩,修改指定接口的返回值

- writeEntries 接口的返回值已经变更为0,fmt.Errorf(stubErrStr),可

以对其进行测试

-在测试完之后,一定要对patch进行reset

- ApplyPrivateMethod 可以为私有方法打桩

3.6 单项单元测试的最后必须要把所有添加的用例删除,释放内存

3.7 go test -cover XXXX 进行测试(XXXX为文件名,例:cntl_test.go)

文章来自个人专栏
刘昱菲测试笔记
2 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0