是否存在Entity Framework的內存提供程序?

entity-framework rhino-mocks

我是針對ADO .NET實體框架編寫的單元測試代碼。我想用行填充內存數據庫,並確保我的代碼正確檢索它們。

我可以使用Rhino Mocks來模擬實體框架,但這還不夠。我會告訴查詢返回給我的實體。這既不會測試where子句,也不會測試.Include()語句。我想確保我的where子句只匹配我想要的行,而不是其他行。我想確定我已經要求我需要的實體,而不是我沒有。

例如:

class CustomerService
{
    ObjectQuery<Customer> _customerSource;
    public CustomerService(ObjectQuery<Customer> customerSource)
    {
        _customerSource = customerSource;
    }
    public Customer GetCustomerById(int customerId)
    {
        var customers = from c in _customerSource.Include("Order")
            where c.CustomerID == customerId
            select c;
        return customers.FirstOrDefault();
    }
}

如果我模擬ObjectQuery以返回一個填充了訂單的已知客戶,我怎麼知道CustomerService有正確的where子句和Include?我寧願插入一些客戶行和一些訂單行,然後斷言選擇了正確的客戶並填充了訂單。

一般承認的答案

EF目前沒有內存提供程序,但是如果你看一下Highway.Data,它有一個基本的抽象接口和一個InMemoryDataContext。

使用Highway.Data測試數據訪問和EF


熱門答案

InMemory提供程序包含在EF7 (預發布)中。

您可以使用NuGet包 ,也可以在GitHub上的EF repo中 查看它( 查看源代碼 )。



Related

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