[英]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.