【问题标题】:Mock IDataRecord using Moq使用 Moq 模拟 IDataRecord
【发布时间】:2011-08-02 14:09:04
【问题描述】:
我正在尝试模拟 IDataRecord 接口。
到目前为止我有:
var mockIDataRecord = new Mock<IDataRecord>();
mockIDataRecord.SetupGet(c => c["id"]).Returns(7);
var z = mockIDataRecord["id"];
但 Visual Studio 在最后一行抛出编译错误:
错误 2 无法将带有 [] 的索引应用于“Moq.Mock ”类型的表达式
有什么建议吗?
【问题讨论】:
标签:
c#
unit-testing
interface
mocking
moq
【解决方案1】:
错误是视觉工作室所说的。您正在将索引应用于 Mock 类的实例,而不是其通用参数(在您的情况下为 IDataRecord)。使用 Mock.Object 将返回 IDataRecord 并对其应用索引的属性
var z = mockIDataRecord.Object["id"];
【解决方案2】:
您已经创建了一个对象的模拟(IDataRecord 类型)。但是,您正在尝试访问 mockIDataRecord[id] 这意味着 mockIDataRecord 是一个集合(数组?)。
类型不匹配可能是导致错误的原因。
你可以试试这样的东西吗(我没有检查语法):
var mockIDataRecord = new Mock<IDataRecord[]>();