簡體   English   中英

如何在單元測試期間覆蓋IQueryable的Contains方法?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM