是否存在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中 查看它( 查看源代码 )。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因