我正在尝试首先使用 EntityFramework 代码测试我的代码。为了使其可测试并允许隔离测试,我创建了一个我DbContext
实现的接口。我没有测试这个DbContext
类 - 我将假设 EF 代码按预期工作。
现在,考虑以下方法:
public IEnumerable<User> GetOddId()
{
return context_.Users.Where((u, i) => i % 2 == 1).AsEnumerable();
}
此方法将与我的模拟一起通过FakeDbSet
(因为它将使用内存中的 LINQ 提供程序),而在使用 EF/LINQ to SQL 驱动程序时它会失败并出现异常。
你会保持原样并希望人们知道的足够多,不要写这样的查询吗?您会放弃隔离测试并在实际数据库上进行测试吗?
带有 DataMigrations 的 LocalDb(可能带有适当的种子)是否有助于在实际数据库上进行测试?
请证明答案的合理性。
TLDR:考虑到内存 LINQ 和 SQL LINQ 之间的差异,如何测试 EntityFramework 代码?
很久以后的编辑:我已经找到了一个非常好的框架,可以完全满足我的需要。我写了一篇关于使用 Effort 进行单元测试的博客文章。另请注意,即将推出的 EF6 可能不需要所有这些,它承诺提供一些单元测试功能。