Golang模拟一个调用,其中一些参数的值不固定

use*_*775 4 go go-testing

我正在模拟一个方法调用,如下所示:

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.589Z2022-04-23T14:17:56.589Z等。我只是不想限制模拟调用以适用于creationDate 的固定值,但我希望它适用于传递的任何日期字符串

Gav*_*vin 7

假设您正在使用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)