Golang单测模板与测试脚本
[本文出自天外归云的博客园]
遵循——“步骤固定,注释清晰”
单测模板
下面是一个标准的单测模板✍🏻包含的步骤:
- 准备测试数据
- Mock+Stub(可选,灵活位,在7前即可)
- 定义测试用例参数
- 定义测试用例预期结果
- 定义并初始化测试用例
- 遍历用例
- 执行待测方法+断言
可以直接复制粘贴下面的空模板代码使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package unityportal import ( "testing" "xx/mocker" ) func TestTemplate(t *testing.T) { // Mock mock := mocker.Create() defer mock.Reset() // 定义测试用例参数 type args struct { customStub func (*mocker.Builder) } // 定义测试用例预期结果 type want struct { } // 定义并初始化测试用例 tests := [] struct { name string args args want want }{ { name: "用例1" , args: args{ customStub: func (mock *mocker.Builder) { }, }, want: want{}, }, } // 遍历用例 for _, tt := range tests { t.Run(tt.name, func (t *testing.T) { // 重置 mock 对象 mock.Reset() // 执行自定义 stub 过程 tt.args.customStub(mock) // 执行待测方法 // 断言 }) } } |
其中stub环节的位置是灵活的,有三种stub:
第一种:不同的case有着一样的stub过程,一样的stub返回值
第二种:不同的case有着一样的stub过程,不一样的stub返回值
第三种:不同的case有着不一样的stub过程,不一样的stub返回值
可以灵活使用,只要保证stub过程的调用在执行待测方法前即可。
执行测试用的脚本
把这个脚本放到项目根目录下:
# 该脚本需要cd到测试文件所在目录下执行 method=$1 # 不传入method参数则运行全部测试 cmd="go test -v -coverprofile=test.out -gcflags=all=-l" # 传入method参数则测试指定方法 if [ "$1" != "" ]; then fileList=$(ls) cmd="go test -v" for file in $fileList; do if echo "$file" | grep -q -E '\.go$'; then cmd="${cmd} $file" fi done cmd="$cmd -test.run $method -coverprofile=test.out -gcflags=all=-l" fi # 执行测试 $cmd # 生成测试覆盖率html报告 go tool cover -html=test.out -o test.html
然后在测试代码所在目录下调用执行(举例:TestGenerateReleaseNews方法在project目录下的测试文件中):
sh ../../../exec_test.sh TestGenerateReleaseNews
本文来自博客园,作者:天外归云,转载请注明原文链接:https://www.cnblogs.com/LanTianYou/p/16304695.html
分类:
Go
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)