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

本文关键字:单元测试 上下文 实体 | 更新日期: 2023-09-27 18:06:21

我正在实体框架上工作,并希望对我的应用程序进行单元测试。问题是EntityContext。我正在使用Moq库。Moq可以用于接口和抽象类。但这里的问题是EntityContext是从DbContext派生的,DbContext既不是抽象类也不是接口。我如何为上下文提供一个最小对象。我试图找到最好的实践,但大多数帖子都是相当旧的(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;
    }
}

注意:抱歉重复问题,但我找不到关于这个主题的最新问题。

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

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

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

在您的存储库中期望IEntityContext实现。在生产代码中发送真实的实现,EntityContext。在单元测试中发送mockientitycontext>()。对象。另一种选择是实现FakeEntityContext,它实现IEntityContext,并在单元测试中充当内存DB。