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)
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)