36 | 代码测试(上):如何编写 Go 语言单元测试和性能测试用例?
孔令飞
该思维导图由 AI 生成,仅供参考
你好,我是孔令飞。
从今天开始,我们就进入了服务测试模块,这一模块主要介绍如何测试我们的 Go 项目。
在 Go 项目开发中,我们不仅要开发功能,更重要的是确保这些功能稳定可靠,并且拥有一个不错的性能。要确保这些,就要对代码进行测试。开发人员通常会进行单元测试和性能测试,分别用来测试代码的功能是否正常和代码的性能是否满足需求。
每种语言通常都有自己的测试包 / 模块,Go 语言也不例外。在 Go 中,我们可以通过testing包对代码进行单元测试和性能测试。这一讲,我会用一些示例来讲解如何编写单元测试和性能测试用例,下一讲则会介绍如何编写其他的测试类型,并介绍 IAM 项目的测试用例。
如何测试 Go 代码?
Go 语言有自带的测试框架testing,可以用来实现单元测试(T 类型)和性能测试(B 类型),通过go test命令来执行单元测试和性能测试。
go test 执行测试用例时,是以 go 包为单位进行测试的。执行时需要指定包名,比如go test 包名,如果没有指定包名,默认会选择执行命令时所在的包。go test 在执行时,会遍历以_test.go结尾的源码文件,执行其中以Test、Benchmark、Example开头的测试函数。
为了演示如何编写测试用例,我预先编写了 4 个函数。假设这些函数保存在 test 目录下的math.go文件中,包名为test,math.go 代码如下:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在 Go 语言项目中编写单元测试和性能测试用例的重要性和方法。作者首先强调了保证功能稳定可靠且具有良好性能的重要性,并详细介绍了通过单元测试和性能测试来实现这一目标。文章详细介绍了使用 Go 语言自带的 `testing` 包进行单元测试和性能测试的方法,包括测试命名规范、单元测试用例函数的编写以及 `go test` 命令的参数使用。此外,文章还介绍了如何编写支持多输入的测试用例和使用 `github.com/stretchr/testify/assert` 包进行结果对比。另外,文章还介绍了如何使用 `gotests` 工具自动生成测试代码,并详细讲解了性能测试的编写和执行方法,包括性能测试函数的命名规范、参数使用以及执行结果的解读。整体而言,本文内容详实,适合 Go 语言开发者快速了解如何进行单元测试和性能测试。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》,新⼈⾸单¥68
《Go 语言项目开发实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(15)
- 最新
- 精选
- daz2yy老师,问下,测试的代码建议放在代码相同目录包下还是放在项目根目录下的 test 目录呢?
作者回复: 放在跟被测代码相同的目录下,便于维护
2021-08-175 - lianyz老师,什么时候使用ExampleXxx呢?
作者回复: 有fmt.Println/fmt.Printf这类输出的时候
2021-08-174 - Struggle~honorvscode可以生成测试代码
作者回复: 666
2022-01-232 - 陈麒文那有没有自动生成Benchmark的性能工具呢?还有TestXxx一般是针对函数么,如果是接口的话,参数值该怎么定义?
作者回复: 暂时没发现有自动生成Benchmark的工具。 使用Mock来测试
2021-08-251 - coyang老师好,请问go常用/好用的mock框架有什么推荐的?
作者回复: 代码测试(下):Go 语言其他测试类型及 IAM 测试介绍 这一讲有介绍
2022-02-07 - 授人以🐟,不如授人以渔在“如何测试Go代码?”这节的开头,“默认会选择执行命令时所在的包”,修改为“默认会选择执行命名时所在的目录”可能会容易理解。
作者回复: 前面的更准确
2021-08-25 - Sch0nggo自带测试框架testing。 使用gotests工具自动生成测试代码。 单元测试的价值是提高代码的可靠性,重构的时候多一层保障。 遇到单元测试不知道怎么写的情况,首先考虑函数的粒度是不是太粗,能不能拆成更小的函数。2021-08-197
- fcl自己写的代码 知道哪个函数经常改 好控制 用白盒测试 别人写的复杂代码 自己只是调用接口 函数太多不知道测哪个 用黑盒测试 面试官:我没问题了,你还有什么想问的吗?2022-04-225
- 韩堂$ go get -u github.com/cweill/gotests/... 后没有直接生成对应的gotests binary2023-02-08归属地:浙江1
- Allengo test真的太粗糙了2021-11-291
收起评论