10. Go 单元测试

本文介绍了Go语言单元测试的基础,包括内置测试框架的使用、如何生成表格驱动的测试用例,以及mock的实践,包括依赖注入和gomock工具的使用。此外,还探讨了云平台产品测试的挑战和解决方案,如创建mock server来测试底层依赖,并讲解了CI搭建和代码覆盖率的重要性。
摘要由CSDN通过智能技术生成

1. Go语言单元测试框架

首先我们来了解一下go语言单元测试的基础知识。

go语言的单元测试采用内置的测试框架,通过引入testing包以及go test来提供测试功能。

在源代码包目录内,所有以_test.go为后缀名的源文件被go test认定为测试文件,这些文件不包含在go build的代码构建中,而是单独通过 go test来编译,执行。

通常对于测试用例,go test有着以下规约:

  • 每个测试函数必须导入testing包。测试函数有如下的命名:

    func TestName(t *testing.T) {
    
    // ...
    
    }
  • 测试函数的名字必须以Test开头,可选的后缀名必须以大写字母开头:

    
    func TestSin(t *testing.T) { /* ... */ }
    
    func TestCos(t *testing.T) { /* ... */ }
    
    func TestLog(t *testing.T) { /* ... */ }
  • 将测试文件和源码放在相同目录下,并将名字命名为{source_filename}_test.go

假设被测试文件example.go,那么在example.go相同目录下建立一个example_test.go的文件去测试example.go文件里的方法。

  • 通常情况下,将测试文件和源码放在同一个包内。

当运行go test命令时,go test会遍历所有的*_test.go中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件。

了解了基础知识,我们举个例子来直观了解在go项目中编写单元测试的全过程,下图是一个项目src/utils包下源码的结构:

img

对于每个包下的每一个文件都有相应的test文件。对于slice.go这个文件,源码是这样的:

img

StringInSlice这个函数去检查一个字符串是否在一个字符串列表中,输入一个string,返回一个布尔值。

slice_test.go中对StringInSlice的测试用例是这样的:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值