使用Moq模拟IDataRecord

时间:2011-08-02 14:09:05

标签: c# unit-testing interface mocking moq

我正在尝试模拟IDataRecord接口。

到目前为止,我有:

        var mockIDataRecord = new Mock<IDataRecord>();
        mockIDataRecord.SetupGet(c => c["id"]).Returns(7);
        var z = mockIDataRecord["id"];

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

错误2无法将带有[]的索引应用于类型为“Moq.Mock&lt; System.Data.IDataRecord&gt;”的表达式

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

错误是视觉工作室所说的。您正在将索引应用于Mock类的实例,而不是其通用参数(在您的情况下为IDataRecord)。使用将返回IDataRecord并对其应用索引的Mock.Object属性

var z = mockIDataRecord.Object["id"];

答案 1 :(得分:0)

您已创建对象的模拟(IDataRecord类型)。但是你试图访问mockIDataRecord [id],这意味着mockIDataRecord是一个集合(数组?)。

类型不匹配可能是造成错误的原因。

你可以尝试这样的东西(我没有检查语法):

var mockIDataRecord = new Mock<IDataRecord[]>();