如何模擬ObjectContext或ObjectQuery 在實體框架?

.net-3.5 entity-framework mocking unit-testing

如何在Entity Framework中模擬ObjectContext或ObjectQuery?

熱門答案

基本的模擬框架只能為接口和抽像類創建模擬(但僅適用於抽象/虛方法)。

由於ObjectContext既不是抽像也不是接口,因此模擬它並不容易。但是,由於具體模型容器是作為部分類生成的(如果使用設計器),您可以從中將所需的方法/屬性提取到接口。在您的代碼中,您可以僅使用界面,然後您可以模擬。

使用ObjectQuery它更容易,因為它有一個基本接口(例如IQueryable),基本上包含您通常需要的所有必要操作(以及LINQ所需的操作)。因此,您應該在業務邏輯中公開IQueryable而不是ObjectQuery,並且可以為該接口創建模擬。

另一種方法是將所有與數據訪問相關的邏輯隱藏到一個單獨的層中(使用最少的邏輯),使用集成測試測試該層,並模擬它以便能夠對其他層進行單元測試。

有一些工具(我只知道TypeMock )使用.NET的分析鉤子來生成模擬 。這些工具不僅限於模擬接口或抽像類,但使用它們,您可以基本上模擬任何東西,包括非虛擬和靜態方法。使用這樣的工具,您無需更改業務邏輯即可進行模擬。

雖然這種方法有時很有用,但您必須意識到,提取接口(IoC)的依賴關係不僅有助於模擬,而且還可以減少組件之間的依賴關係,這也有其他好處。

我個人喜歡Rhino.Mocks最好的免費軟件工具,但我們也使用TypeMock ,這也是一個很棒的產品(但你必須付錢)。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因