我正在使用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个使用模拟的额外记录,而不修改任何实际的数据库?
我也渴望听取关于这种架构是否无法测试以及如何重构的意见。
答案 0 :(得分:0)
在运行方法之前,将一个变量设置为.Count()
的{{1}},然后根据DbSet
的值检查该变量。