- 对于第三方package的函数调用,如果该函数可能会出错,且需要覆盖出场景下的代码,那么加封一层,这样必要时我们可以替换自己的函数。
- 对于第三方函数的调用,考虑将直接依赖改为接口依赖,这样必要时我们可以新建一个自己的接口实现,这样我们可以随意控制实现的细节。
- 可以将第三方的函数调用,通过var = func这种形式来声明,然后就可以通过GoStub库来替换函数。
- 对于我们自己编写的方法调用,可以令方法调用一个同等的函数,然后令这个函数用方法3来声明,然后这样我们可以通过替换函数来替换方法。
- 内部的各个模块之间,通过接口来调用,以便后续注入不同的接口实现,来达到测试的目的。
- 如果要并发测试,那么可以考虑写一个test.py,同时跑多个go test。
- 对于内部模块,尽量提供一个xxxxtest包,直接提供打桩功能,另外对于内部模块,尽量对外暴露接口,而不是结构体(实现)。
- 个人通常尽量不使用框架来测试代码,如果要用的话,推荐以下几个:
常见的go test打桩框架:
- GoStub:替换全局变量、函数、过程
- monkey:替换函数、方法
- 测试文件跟待测试的文件放同一个目录下,名字叫xxx_test.go,包名为xxxx_test。
- 运行测试:
go test -cover=true xxxx -coverprofile=out.out 将在当前目录生成覆盖率数据。
配合 go tool cover -html=out.out 在浏览器中打开 HTML 报告。
或者使用 go tool cover -html=out.out -o=out.html