学习笔记 | Go testing 里的巧妙设计

简介: 学习笔记 | Go testing 里的巧妙设计

go01.jpeg

原文地址: https://mp.weixin.qq.com/s?__biz=MzAxMTA4Njc0OQ==&mid=2651454342&idx=1&sn=991851875ff5bc7da168dd13f6ed21a7&scene=21#wechat_redirect

问题

testing和unsafe不一样:unsafe所有的语义和实现都由编译器负责解释,本身只是作为占位符提供文档;testing虽然是用来测试其它package的,但是它本身并没有在编译器那里得到任何优待,只是普通的一个package,它自己也需要依赖其它package也需要测试。

testing支持的场景越复杂,引入的依赖就越多。譬如:bytes flag fmt io os reflect runtime sync等等还有很多。

那么问题来了:以bytes为例,既然testing依赖于bytes,那么bytes在测试时依赖testing不就import cycle了吗?

解决办法

  • export_test.go: 测试不同 package 中的私有变量
  • XTest: 定义接口 -> 使用接口 -> 测试转发

接口

说起接口的作用,人们首先想起的总是那些八股文。

但是在这里,官方团队给我们上了生动的一课:接口在解决循环依赖中的巨大作用。

而且这种手法并不局限于context或者testing,它比第一种方案更具普适性(在测试这个特定场景下也更繁琐),完全可以在真实的世界里发挥巨大作用。

目录
相关文章
|
5月前
|
监控 安全 Java
Go语言学习笔记(一)
Go语言学习笔记(一)
120 1
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
6天前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
25天前
|
人工智能 算法 搜索推荐
Go学习笔记-代码调
近年来,人工智能技术飞速发展,Cody作为由Sourcegraph开发的一款AI驱动编码助手,应运而生。它不仅提供代码预测与补全,还能深度理解代码上下文,为开发者提供准确建议,提升编码效率和质量。Cody能识别潜在错误并提出修复建议,缩短调试时间,同时进行智能代码审查,帮助优化代码结构和风格。未来,随着AI技术进步,Cody将不断学习优化,成为开发者不可或缺的伙伴,推动编程领域的创新与发展。
24 0
|
5月前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
69 1
|
5月前
|
存储 分布式计算 算法
GO学习笔记之表达式
GO学习笔记之表达式
47 1
|
5月前
|
存储 编译器 Go
GO语言学习笔记
GO语言学习笔记
41 1
|
12月前
|
Go iOS开发 MacOS
Go学习笔记-代码调试工具 dlv
Go学习笔记-代码调试工具 dlv
787 1
Go学习笔记-代码调试工具 dlv
|
12月前
|
编译器 Go
Go学习笔记-defer、panic、recover分析
Go学习笔记-defer、panic、recover分析
76 1
Go学习笔记-defer、panic、recover分析
|
12月前
|
Go 自然语言处理 编译器
Go 学习笔记-Go 词法解析
Go 学习笔记-Go 词法解析
70 0
Go 学习笔记-Go 词法解析