如何在Ginkgo中获取Mock函数InsertOneProspecto的入参
获取gomock中InsertOneProspecto函数的调用入参
基于你使用的Golang v1.19.2、onsi/ginkgo/v2 v2.1.4和golang/mock v1.6.0,要获取传递给Mock的InsertOneProspecto函数的入参,可通过gomock提供的*gomock.Call对象的Calls属性实现,以下是修正后的完整示例:
// 初始化mock控制器与mock实例 ctrl := gomock.NewController(GinkgoT()) defer ctrl.Finish() // 确保测试结束时验证所有mock期望 mockDB := mock.NewMockPersistence(ctrl) // 设置期望调用并保存对应的Call对象 callInsert := mockDB.EXPECT().InsertOneProspecto(gomock.Any()).Return("1098101810", nil) // 执行被测程序逻辑 // ...(此处调用你的业务代码) // 提取调用入参 var myArg dom.Prospect // 从第一次调用记录中获取第一个参数,注意类型断言 if len(callInsert.Calls) > 0 { arg, ok := callInsert.Calls[0].Arguments[0].(dom.Prospect) if ok { myArg = arg // 此处可对myArg进行断言或后续验证操作 } }
关键说明
callInsert.Calls是调用记录数组,每个元素对应一次InsertOneProspecto的实际调用Arguments[0]对应函数的第一个入参,需根据实际参数顺序调整索引- 必须用类型断言将空接口转换为目标类型
dom.Prospect,避免类型错误 - 先检查
callInsert.Calls长度,防止因mock未被调用导致索引越界
内容的提问来源于stack exchange,提问作者Kaltresian
相关产品推荐
相关产品推荐

