Mockery测试中如何忽略SubmittedAt参数值?
解决gomock测试中忽略特定结构体字段的问题
你遇到的问题是因为mock.Anything是无类型常量,无法直接赋值给*timestamppb.Timestamp类型的字段,导致类型不兼容报错。下面提供两种可行的解决方法:
方法一:使用mock.MatchedBy()自定义匹配逻辑
通过mock.MatchedBy()传入自定义函数,只校验你关心的字段,忽略SubmittedAt的值:
client.EXPECT().Process(param1, mock.MatchedBy(func(req *YourRequestStruct) bool { // 仅校验MemberId和UserId,SubmittedAt的值不做要求 return req.Txn.MemberId == memberId && req.Txn.UserId == userId })).Return(true, nil).Once()
注意将YourRequestStruct替换为你实际使用的请求结构体类型,函数内可根据需求添加更多字段校验。
方法二:使用mock.AnythingOfType()指定匹配类型
如果只需要确保SubmittedAt是正确类型(不关心具体值),可以用mock.AnythingOfType()传入目标类型的字符串标识:
client.EXPECT().Process(param1, &YourRequestStruct{ Txn: &TxnStruct{ MemberId: memberId, UserId: userId, // 匹配*timestamppb.Timestamp类型的任意值 SubmittedAt: mock.AnythingOfType("*timestamppb.Timestamp"), }, }).Return(true, nil).Once()
需替换YourRequestStruct和TxnStruct为实际的结构体类型。
内容的提问来源于stack exchange,提问作者AKang123.
相关产品推荐
相关产品推荐

