如何模拟接受参数的方法

时间:2016-12-10 00:17:47

标签: c# .net moq

我正在使用moq,并希望模拟一个接受out参数的方法:

protected void GetDataRow(string id, out DataRow dataRow)

这就是我的尝试:

dataMock.Protected().Setup("GetDataRow", ItExpr.IsAny<string>(), ItExpr.IsAny<DataRow>());

然而,它返回:

System.ArgumentException : Member DataManager.GetDataRow does not exist.

如果我将dataRow参数更改为out,则一切都按预期工作。

在这种情况下我应该如何创建模拟?

2 个答案:

答案 0 :(得分:5)

您不能将IsAny<DataRow>与out参数一起使用。您可以创建本地IsAny<DataRow>变量并将其传递给模拟,而不是DataRow。稍后调用mock将返回dataRow,因此您可以使用它来验证测试期望。

DataRow dataRow = new DataRow();
dataMock.Protected().Setup("GetDataRow", ItExpr.IsAny<string>(), out dataRow);

答案 1 :(得分:1)

可以从moq 4.8.0-rc1(2017-12-08)开始。您可以使用ItExpr.Ref<DataRow>.IsAny匹配refout参数的任何值。在你的情况下:

dataMock.Protected().Setup("GetDataRow", ItExpr.IsAny<string>(), ItExpr.Ref<DataRow>.IsAny);