没有参数的Moq回调

Tim*_*Tim 5 c# unit-testing moq callback out

我正在尝试使用Moq模拟以下方法签名的回调:

ResponseHeader AddIncentives(
        Hs_transRow[] data,
        out ResponseBody responseBody);
Run Code Online (Sandbox Code Playgroud)

我希望我的回调使用传入的数据。但是,我遇到的问题是因为第二个参数是out参数。我可以毫无问题地设置和返回数据,但是回调是一个问题。

这是我当前的设置:

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,
});
Run Code Online (Sandbox Code Playgroud)

当我在单元测试中运行以下代码时,出现错误:

无效的回调。在具有参数(Hs_transRow [],ResponseBody&)的方法上进行的设置无法调用具有参数(Hs_transRow [],ResponseBody)的回调。

我可以看到&符之间的差异,我认为这是因为该参数应该是out参数。但是,如果将out关键字添加到回调中(并在回调中为其分配值),则会收到生成时间错误:

代表“动作”不带两个参数。

Moq是否无法处理具有out参数的方法的回调,还是我做错了什么?

[编辑]毫无疑问,我不是在问如何设置out参数的值。这行已经完成了:

var addIncentiveResponseBody = new ResponseBody();
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 5

Jeroen Heier 在评论中指出了这一点,但将其添加为答案应该会使其更加明显。Scott Wegner 编写了一个可以使用的OutCallback 重载。

其用法如下:

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,
    });
Run Code Online (Sandbox Code Playgroud)