Go 服务开发高手课
徐逸
头部大厂资深 Go 技术专家、前腾讯资深工程师
1177 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 22 讲/共 28 讲
开篇词 (1讲)
Go 服务开发高手课
15
15
1.0x
00:00/00:00
登录|注册

21|单元测试:如何mock外部依赖并提升覆盖率?

你好,我是徐逸。
通过前面课程的学习,想必你已经掌握了从编码角度规避代码陷阱的方法,也了解了如何合理地打印日志与返回错误码。然而,即便我们在编码过程中十分谨慎,也无法完全杜绝代码出现问题的可能性。幸运的是,我们能够借助测试手段提前发现潜在的代码问题。而在众多测试手段之中,单元测试有着举足轻重的地位,它能为整个代码库的质量奠定一个坚实的基础。
所以,在今天的课程里,我们就来聊聊单元测试的相关知识,以及 Go 语言中用于单元测试的工具。

什么是单元测试?

所谓单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证,在 Golang 编程语境里,这通常具体指代单个函数。单元测试遵循着 AAA(Arrange-Act-Assert)的代码组织结构就像下面的代码一样。
func TestAdd(t *testing.T) {
// Arrange(安排)
a := 5
b := 3
expected := 8
// Act(行动)
result := Add(a, b)
// Assert(断言)
assert.Equal(t, expected, result)
}
首先在 Arrange 部分,我们需要准备测试所需的所有前置条件,比如初始化被测试对象、准备输入数据、创建模拟对象(如果有外部依赖)等。接着,在 Act 部分,我们需要调用被测试的函数或方法,触发实际的行为。最后在 Assert 部分,需要验证调用的结果是否符合预期。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 单元测试是软件开发中重要的验证手段,遵循 AAA(Arrange-Act-Assert)的代码组织结构,通过准备测试前置条件、调用被测试的函数或方法以及验证结果是否符合预期来提前发现潜在的代码问题。 2. 好的单元测试必须遵循自动化、独立性和可重复的原则,断言库与 Mock 框架的支持是不可或缺的,能够帮助实现这些原则。 3. 在 Go 语言中,testify 和 goconvey 是两个广泛使用的断言库,提供了简单易用的断言函数和更为强大的功能,能够帮助开发者判断结果是否符合预期。 4. Mock 功能在 Go 语言中可以通过 gomonkey 等技术实现,能够巧妙地改写函数指令,达到 mock 的目的,确保单元测试的可重复性。 5. 单元测试覆盖率是衡量单元测试对代码的覆盖程度的重要指标,通过 go test 命令和 go tool cover 工具可以生成详细的覆盖率报告,并将单元测试集成到持续集成(CI)流程中,以确保代码的充分测试。 6. 通过持续集成(CI)流程,可以在每次代码提交时自动运行单元测试,并检查覆盖率,如果覆盖率未达到预设的阈值,系统将阻止代码合并,从而提高代码的质量和稳定性。 7. 为了提高单元测试覆盖率,除了依赖研发人员自觉编写更全面的测试用例外,还可以将单元测试集成到持续集成(CI)流程中,通过规则设置来确保代码的充分测试。 8. 单元测试的覆盖率可以通过 go test 命令和 go tool cover 工具来统计和生成详细的覆盖率报告,以便开发者了解代码的测试情况。 9. 通过持续集成(CI)流程,可以在每次代码提交时自动运行单元测试,并检查覆盖率,确保代码的质量和稳定性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)