我正在模拟一个方法调用,如下所示:
tctx.someMock.On("addProd",
product.NewAddProductParamsWithContext(ctx).
WithID("someid").
WithCreateRequest(pro.CreateProdBody{
creationDate: "someDate" ,
}), nil).
Return(nil, nil)
Run Code Online (Sandbox Code Playgroud)
效果很好。
现在,在这里,creationDate
如果我想概括它,使其适用于传递的任何值,而不是传递该字段的固定值,我该如何实现呢?我对 Go 还很陌生,所以不知道该怎么做
createDate 的值可以是任何值,例如 -2021-03-19T18:57:16.589Z
或2022-04-23T14:17:56.589Z
等。我只是不想限制模拟调用以适用于creationDate 的固定值,但我希望它适用于传递的任何日期字符串
假设您正在使用github.com/stretchr/testify/mock
,您应该能够使用mock.MatchedBy()
to 匹配参数的特定部分。例如:
tctx.someMock.On("addProd", mock.MatchedBy(func(i interface{}) bool {
p := i.(*product.AddProductParams)
return p.ID() == "someid"
})).Return(nil, nil)
Run Code Online (Sandbox Code Playgroud)
但是,我发现当需要根据输入采取不同的操作时,这是最有用的。如果您只是验证addProd
是否使用特定参数调用,请考虑断言:
tctx.someMock.On("addProd", mock.Anything).Return(nil, nil)
...
tctx.someMock.AssertCalled(t, "addProd", mock.MatchedBy(func(i interface{}) bool {
p := i.(*product.AddProductParams)
return p.ID() == "someid"
})).Return(nil, nil)
Run Code Online (Sandbox Code Playgroud)