[英]How to mock IDataRecord?
我正在尝试使用 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"
但没有区别。 这应该很容易,但我正在挠头 - 感谢您的任何建议!
我这样做,又快又脏:
Mock<IDataRecord> dataRecord = new Mock<IDataRecord>();
dataRecord.Setup(column => column["applicationno"]).Returns("foobar");
dataRecord.Setup(column => column["numberOfApplications"]).Returns(12);
您不能模拟静态或扩展方法,因为大多数模拟框架在后台使用动态代理。
在您的测试中,不要存根扩展方法。 相反,存根原始方法本身,例如:
mockDataRecord.Setup(r => r.GetValue<DateTime>("QUEUE_ADD_TS")).Returns(now);
您应该单独测试扩展方法,例如:
存根 GetValue 方法并断言 GetValueOrDefault 返回存根值。
不要存根 GetValue 方法,并断言 GetValueOrDefault 返回默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.