摘要:
一、Go语言精进之路读书笔记系列 第3部分 声明、类型、语句与控制结构 Go语言精进之路读书笔记第8条——使用一致的变量声明形式 Go语言精进之路读书笔记第9条——使用无类型常量简化代码 Go语言精进之路读书笔记第10条——使用iota实现枚举常量 Go语言精进之路读书笔记第11条——尽量定义零值可 阅读全文
摘要:
49.1 关于调试,你首先应该知道的几件事 1.调试前,首先做好心理准备 2.预防bug的发生,降低bug的发生概率 (1) 充分的代码检查 (2) 为调试版添加断言 (3) 充分的单元测试 (4) 代码同级评审 3.bug的原因定位和修正 (1) 收集“现场数据” (2) 定位问题所在 (3) 修 阅读全文
摘要:
48.1 expvar包的工作原理 Go标准库中的expvar包提供了一种输出应用内部状态信息的标准化方案,这个方案标准化了以下三方面内容: 数据输出接口形式 输出数据的编码格式 用户自定义性能指标的方法 import ( _ "expvar" "fmt" "net/http" ) func mai 阅读全文
摘要:
47.1 pprof的工作原理 1.采样数据类型 (1) CPU数据 (2) 堆内存分配数据 (3) 锁竞争数据 (4) 阻塞时间数据 2.性能数据采集的方式 (1) 通过性能基准测试进行数据采集 go test -bench . xxx_test.go -cpuprofile=cpu.prof g 阅读全文
摘要:
46.1 性能基准测试在Go语言中是“一等公民” 性能基准测试在Go语言中和普通的单元测试一样被原生支持的,得到的是“一等公民”的待遇。 我们可以像对普通单元测试那样在*_test.go文件中创建被测对象的性能基准测试,每个以Benchmark前缀开头的函数都会被当作一个独立的性能基准测试。 46. 阅读全文
摘要:
模糊测试就是指半自动地为程序提供非法的、非预期、随机的数据,并监控程序在这些输入数据下是否会出现崩溃、内置断言失败、内存泄漏、安全漏洞等情况。 45.1 模糊测试在挖掘Go代码的潜在bug中的作用 Dmitry Vyukov 2015年使用go-fuzz在Go标准库中发现了137个bug。 45.2 阅读全文
摘要:
44.1 fake:真实组件或服务的简化实现版替身 fake测试就是指采用真实组件或服务的简化版实现作为替身,以满足被测代码的外部依赖需求。 使用fake替身进行测试的最常见理由是在测试环境无法构造被测代码所依赖的外部组件或服务,或者这些组件/服务有副作用。 type fakeOkMailer st 阅读全文
摘要:
43.1 testdata目录 Go语言规定:Go工具链将忽略名为testdata的目录。 开发者可以在名为testdata的目录下存放和管理测试代码依赖的数据文件,数据文件可作为输入也可作为输出 go test命令在执行时会将被测试程序包源码所在目录设置为其工作目录,可以这样使用f, err := 阅读全文
摘要:
聚焦测试函数的内部代码该如何编写。 42.1 Go测试代码的一般逻辑 针对给定的输入数据,比较被测函数/方法返回的实际结果值与预期值,如有差异,则通过testing包提供的相关函数输出差异信息 42.2 表驱动的测试实践 func TestCompare(t *testing.T) { compar 阅读全文
摘要:
聚焦位于测试包内的测试代码该如何组织 41.1 经典模式—平铺 测试函数各自独立,测试函数之间没有层级关系,所有测试平铺在顶层 41.2 Unit家族模式 测试套件(Test Suite)和测试用例(Test Case) 41.3 测试固件 测试固件是一个人造的、确定性的缓解,在这个环境中进行测试, 阅读全文
摘要:
测试代码存放在包含TestXxx函数的以*_test.go文件名结尾的文件中 40.1 官方文档的“自相矛盾” 包内测试:测试代码放在与被测包同名的包中 包外测试:测试代码放在名为被测包包名+"_test"的包中 40.2 包内测试与包外测试 包内测试: 优:白盒测试,高覆盖率 缺:测试代码自身需要 阅读全文