我正在尝试使用Moq来模拟以下方法签名的回调:
ResponseHeader AddIncentives(
Hs_transRow[] data,
out ResponseBody responseBody);
我希望我的回调函数能够使用传入的数据。然而,我遇到了问题,我认为这是因为第二个参数是一个输出参数。我可以设置和返回数据,但是回调函数是一个问题。
这是我的当前设置:
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,
});
当我将这段代码作为单元测试的一部分运行时,出现以下错误:
无效回调。使用参数(Hs_transRow[],ResponseBody&)设置的方法不能调用具有参数(Hs_transRow[],ResponseBody)的回调。
我可以看到存在一个&符号的差异,我认为这是因为该参数应该是一个输出参数。然而,如果我在回调中添加out关键字(并在回调中分配一个值),我会得到构建时间错误:
委托“Action”不接受两个参数。
Moq是否无法处理具有输出参数的方法的回调,还是我做错了什么?
【编辑】为了消除任何疑问,我不是在询问如何设置输出参数的值。这已经由以下行完成:
var addIncentiveResponseBody = new ResponseBody();