[英]How do I override the Contains method of IQueryable during a unit test?
所以這就是:我有一個我正在測試的應用程序使用LINQ to Entities(EF4 / .NET4)。 該應用程序綁定到忽略空值的Contains方法的實現,並且由於數據庫的配置方式,忽略大小寫。 這很好用。
但是,當我從單元測試中調用相同的方法時,我傳入的是一個偽上下文,它使用IQueryable的內存實現來公開集合。 在這種情況下,它是引入的包含的LINQ to Objects版本,並且關注null和case。
現在,我可以編寫我的應用程序代碼來檢查null和case,但我不想影響正在生成的SQL,因此當它從單元測試中調用並且不涉及SQL時它將起作用。
我真正想要的是提供正確的IQueryable或其他任何東西,以便在測試期間,我可以交換我自己的自定義包含忽略null和case的實現。 我怎么做? 謝謝!
編譯器將綁定到最派生的編譯時類型的擴展方法。
即使你傳遞了一個模擬實例,並且在單元測試上下文中有一個“包含”擴展方法的自定義實現,你調用的一些代碼只知道你提供了一個IQueriable實例,所以它綁定到linq到對象版本。
可能你可以通過實現自己的QueryProvider來實現這一點,但它似乎是一個極端的選擇。
如果您可以使用C#4.0動態類型,可能還有另一種方法。
如果你有一個虛假的上下文,你不能創建一個模擬IQueriable
並使用它嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.