使用Moq模拟IDataRecord

3
我将尝试模拟一个IDataRecord接口。
到目前为止,我已经做了以下工作:
        var mockIDataRecord = new Mock<IDataRecord>();
        mockIDataRecord.SetupGet(c => c["id"]).Returns(7);
        var z = mockIDataRecord["id"];

但是在最后一行,Visual Studio会抛出一个编译错误:

错误 2 无法对类型为 'Moq.Mock <System.Data.IDataRecord>' 的表达式应用索引 []。

有什么建议吗?

2个回答

4
错误是Visual Studio所说的。您正在将索引应用于Mock类的实例,而不是其泛型参数(在您的情况下为IDataRecord)。使用Mock.Object属性,该属性将返回IDataRecord并对其应用索引。
var z = mockIDataRecord.Object["id"];

0
你已经创建了一个 IDataRecord 类型的对象模拟。但是你试图访问 mockIDataRecord[id],这意味着 mockIDataRecord 是一个集合(数组?)。
类型不匹配可能是导致错误的原因。
你可以尝试像这样做(我没有检查语法):
var mockIDataRecord = new Mock<IDataRecord[]>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接