Golang单测模板与测试脚本
[本文出自天外归云的博客园]
遵循——“步骤固定,注释清晰”
单测模板
下面是一个标准的单测模板✍🏻包含的步骤:
- 准备测试数据
- Mock+Stub(可选,灵活位,在7前即可)
- 定义测试用例参数
- 定义测试用例预期结果
- 定义并初始化测试用例
- 遍历用例
- 执行待测方法+断言
可以直接复制粘贴下面的空模板代码使用:
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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号