单元测试EF6非查询操作

时间:2015-01-20 16:30:49

标签: entity-framework unit-testing mocking moq entity-framework-6

我正在使用Entity Framework 6,我有一个类,它有一个向数据库添加一些记录的方法:

interface IRecordsContext
{
    DbSet<MyRecord> MyRecords { get; }
    int SaveChanges();
}

class MyService
{
    public MyService(IRecordsContext ctx)
    {
        _context = ctx;
    }

    private readonly IRecordsContext _context;

    public void AddRecords(int count)
    {
        _context.MyRecords.AddRange(
            from id in Enumerable.Range(1, count)
            select new MyRecord { Value = id }
        );

        _context.SaveChanges();
    }
}

现在我正在使用Moq库来创建单元测试:

void AddRecords_ShouldAddThemToDatabase()
{
    var contextMock = new Mock<IRecordsContext>();
    // ...
}

如何编写一个测试,确保Records集合现在包含10个使用模拟的额外记录,而不修改任何实际的数据库?

我也渴望听取关于这种架构是否无法测试以及如何重构的意见。

1 个答案:

答案 0 :(得分:0)

在运行方法之前,将一个变量设置为.Count()的{​​{1}},然后根据DbSet的值检查该变量。