带有 out 参数的最小起订量回调
Moq callback with out parameter
我正在尝试使用 Moq 模拟以下方法签名的回调:
ResponseHeader AddIncentives(
Hs_transRow[] data,
out ResponseBody responseBody);
我希望我的回调使用传入的数据。但是,我 运行 遇到了一些问题,我认为这是因为第二个参数是一个输出参数。我可以毫无问题地设置和 return 数据,但回调是个问题。
这是我当前的设置:
var addIncentiveResponseBody = new ResponseBody();
mockCoinsService
.Setup(service => service.AddIncentives(It.IsAny<Hs_transRow[]>(), out addIncentiveResponseBody))
.Callback((Hs_transRow[] data, ResponseBody body) =>
{
//I want to use the data variable here
})
.Returns(() => new ResponseHeader
{
action = ResponseHeaderAction.RESPONSE,
});
当我 运行 将此代码作为单元测试的一部分时,出现错误:
Invalid callback. Setup on method with parameters (Hs_transRow[],ResponseBody&) cannot invoke callback with parameters (Hs_transRow[],ResponseBody).
我可以看到有一个符号差异,我认为这是因为该参数应该是一个输出参数。但是,如果我将 out 关键字添加到回调(并在回调中为其分配一个值),我会得到构建时间错误:
Delegate 'Action' does not take two arguments.
是 Moq 无法处理具有 out 参数的方法的回调,还是我做错了什么?
[编辑] 毫无疑问,我不是在问如何设置 out 参数的值。这已经通过以下行完成:
var addIncentiveResponseBody = new ResponseBody();
Jeroen Heier 在评论中指出了这一点,但将其添加为答案应该会使其更加明显。 Scott Wegner 写了一个 OutCallback overload 可以使用。
这个用法如下:
mockCoinsService
.Setup(service => service.AddIncentives(It.IsAny<Hs_transRow[]>(), out addIncentiveResponseBody))
.OutCallback((Hs_transRow[] data, ResponseBody body) =>
{
//I can now use the data variable here
})
.Returns(() => new ResponseHeader
{
action = ResponseHeaderAction.RESPONSE,
});
我正在尝试使用 Moq 模拟以下方法签名的回调:
ResponseHeader AddIncentives(
Hs_transRow[] data,
out ResponseBody responseBody);
我希望我的回调使用传入的数据。但是,我 运行 遇到了一些问题,我认为这是因为第二个参数是一个输出参数。我可以毫无问题地设置和 return 数据,但回调是个问题。
这是我当前的设置:
var addIncentiveResponseBody = new ResponseBody();
mockCoinsService
.Setup(service => service.AddIncentives(It.IsAny<Hs_transRow[]>(), out addIncentiveResponseBody))
.Callback((Hs_transRow[] data, ResponseBody body) =>
{
//I want to use the data variable here
})
.Returns(() => new ResponseHeader
{
action = ResponseHeaderAction.RESPONSE,
});
当我 运行 将此代码作为单元测试的一部分时,出现错误:
Invalid callback. Setup on method with parameters (Hs_transRow[],ResponseBody&) cannot invoke callback with parameters (Hs_transRow[],ResponseBody).
我可以看到有一个符号差异,我认为这是因为该参数应该是一个输出参数。但是,如果我将 out 关键字添加到回调(并在回调中为其分配一个值),我会得到构建时间错误:
Delegate 'Action' does not take two arguments.
是 Moq 无法处理具有 out 参数的方法的回调,还是我做错了什么?
[编辑] 毫无疑问,我不是在问如何设置 out 参数的值。这已经通过以下行完成:
var addIncentiveResponseBody = new ResponseBody();
Jeroen Heier 在评论中指出了这一点,但将其添加为答案应该会使其更加明显。 Scott Wegner 写了一个 OutCallback overload 可以使用。
这个用法如下:
mockCoinsService
.Setup(service => service.AddIncentives(It.IsAny<Hs_transRow[]>(), out addIncentiveResponseBody))
.OutCallback((Hs_transRow[] data, ResponseBody body) =>
{
//I can now use the data variable here
})
.Returns(() => new ResponseHeader
{
action = ResponseHeaderAction.RESPONSE,
});