【发布时间】:2013-05-08 08:04:45
【问题描述】:
我正在尝试使用 Moq 模拟 IDataRecord。
模拟创建如下:
Mock<IDataRecord> mockDataRecord = new Mock<IDataRecord>();
被测行是:
DateTime timestamp = dataRecord.GetValueOrDefault<DateTime>("QUEUE_ADD_TS");
试过了:
mockDataRecord.Setup(r => r.GetValueOrDefault<DateTime>("QUEUE_ADD_TS")).Returns(now);
...但它给出了运行时错误:
表达式引用了一个不属于被模拟的方法 对象:r => r.GetValueOrDefault("QUEUE_ADD_TS")
还尝试用It.IsAny<String>() 代替"QUEUE_ADD_TS",但没有任何区别。这应该很容易,但我摸不着头脑 - 感谢任何建议!
【问题讨论】:
-
我在
IDataRecord接口上看不到GetValueOrDefault<T>方法。不是扩展方法吗? -
很确定它就像错误所暗示的那样。 GetValueOrDefault 是一种扩展方法,因此不能直接存根。尝试对索引器进行存根,我相信示例会在某处:)
-
啊,你们都对!原来
GetValueOrDefault是一个扩展方法并且是static所以可能不容易被嘲笑。不太清楚这是如何工作的,但正在研究它......
标签: c# unit-testing mocking moq