我如何对我的实体上下文进行单元测试

时间:2013-03-29 07:17:32

标签: c# entity-framework unit-testing moq entity-framework-5

我正在研究实体框架,并希望对我的应用程序进行单元测试。问题是EntityContext。我正在使用Moq库。 Moq可用于接口和抽象类。但问题是EntityContext是从DbContext派生的,它既不是抽象类也不是接口。我如何为上下文提供moq对象。我试图找到最佳实践,但大多数帖子都很老(2,3岁)。我正在使用EF 5.0,我认为微软或其他人应该做一些测试EntityContext。

public class Repository
{
private EntityContext _context;
public EntityContext Context;

    public Repository()
    {
        _context = new EntityContext();
    }

    internal Repository(MockContext mockContext)  // Mock Context. Is it possible?
    {
        _context = mockContext;
    }
}

注意:很抱歉重复提问,但我无法找到有关此主题的最新问题。

1 个答案:

答案 0 :(得分:0)

我要做的是让EntityContext实现一个接口。假设EntityContext公开了Employees列表和Departments列表。你可以这样做:

public interface IEntityContext
{
    IQueryable Departments { get; set;}
    IQueryable Employees { get; set;}
}

在您的存储库中期望IEntityContext实现。在生产代码中发送真实的实现EntityContext。在单元测试中,在指定您的期望后发送Mock< IEntityContext>()。Object。 另一个选择是实现一个FakeEntityContext,它实现IEntityContext并在单元测试中用作内存DB。