Go 测试实践
2022-08-31 22:58:02 18 举报
AI智能生成
Go 测试实践
作者其他创作
大纲/内容
基准测试
测试代码需要保证函数可重入性及无状态
定义
每个测试用例函数需要以Benchmark为前缀,eg:func Benchmark_XXX(b *testing.B) { ... })
基准测试原理
使用
测试文件中全部函数:go test -v -bench=. benchmark_test.go
自定义测试时间:go test -v -bench=. -benchtime=5s benchmark_test.go
统计内存分配:go test -v -bench=Alloc -benchmem benchmark_test.go
计时器控制
使用
重置数据:ResetTimer()
并发用法
使用
参考
go benchmark实践与原理
Go语言使用benchmark进行性能测试
并行运行单测
模糊测试
一些建议
项目目录结构:模块合理拆分,外部依赖分离
面向接口 Mock
推荐
通过测试驱动开发来学习Go
learn-go-with-tests
golang 单元测试
Golang 单元测试指引
基础知识
测试用例文件不会参与正常源码编译,不会被包含到可执行文件中
测试用例可以不传入 *testing.T 参数
执行测试
当前函数:go test -v -run TestA$ select_test.go
当前目录:go test -v . | - go test ./examples -vet off -v
递归子目录:go test -v ./...
终止单测
测试覆盖率
执行:
go test -cover -coverprofile=c.out {测试目录}
go test -cover -coverprofile=c.out {测试目录}
查看:
go tool cover -html=c.out
go tool cover -func=c.out
go tool cover -html=c.out
go tool cover -func=c.out
参考1
参考2
单测
为什么需要单测?
提高代码质量
加深理解需求
利于重构与设计
定义
文件必须以_test结尾
每个测试用例函数需要以Test为前缀,eg:func TestXXX( t *testing.T )
testing包
func (t *T) Fail()
func (t *T) FailNow()
func (t *T) Log(args ...interface{})
func (t *T) Fatal(args ...interface{})
单测分类
mothod :面向接口开发
sqlmock
httpmock
Redis
测试框架
基本操作
Testify
github.com/stretchr/testify/assert
github.com/stretchr/testify/suite
实例 1
github.com/stretchr/testify/mock
github.com/vektra/mockery
IDEA自动生成测试模板
GoConvey
用法
Mock
GoStub
用法
场景:变量、函数 打桩
缺点
过程或函数通过GoStub框架打桩时,对产品代码有侵入性
方法(成员函数)无法通过GoStub框架打桩
GoMock
用法
场景:基于 interface 打桩
Monkey
用法
缺点
该项目已归档,不在维护了,M1 芯片的电脑无法直接运行,无法debug
Monkey 不是线程安全的,不要将 Monkey 用于并发的测试中。
panic: permission denied [recovered] 问题
个人增强版
用法
复杂单测-Ginkgo
0 条评论
下一页