我正在使用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
,则一切都按预期工作。
在这种情况下我应该如何创建模拟?
答案 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
匹配ref
或out
参数的任何值。在你的情况下:
dataMock.Protected().Setup("GetDataRow", ItExpr.IsAny<string>(), ItExpr.Ref<DataRow>.IsAny);