【发布时间】:2011-10-09 15:17:26
【问题描述】:
我研究了一些有关可用于对 DbContext 进行单元测试的技术的信息。我想在上下文中添加一些内存中数据,以便我的测试可以针对它运行。我正在使用数据库优先的方法。
我发现最有用的两篇文章是this 和this。 这种方法依赖于创建 MyContext 和 FakeContext 都将实现的 IContext 接口,从而允许模拟上下文。
但是,我试图避免使用存储库来抽象 EF,例如 pointed by some 人,因为 EF 4.1 已经通过 DbSet 和 DbContext 实现了存储库和工作单元模式,我真的很想保留 EF 团队实现的所有功能,而不必像我在其他项目中那样使用通用存储库自己维护它们(这有点痛苦)。
使用 IContext 会引导我走上相同的道路(或者不会?)。
我考虑过创建一个从主 MyContext 继承的 FakeContext,从而利用它下面的 DbContext 来运行我的测试而无需访问数据库。 我找不到类似的实现,所以我希望有人可以帮助我。
我是不是做错了什么,或者这会导致我遇到一些我没有预料到的问题?
【问题讨论】:
-
对于仍在寻找答案的任何人 - 我编写了一个简单的库来帮助以非常简单的方式模拟 DbContext。有关详细信息,请参阅我对类似问题的其他答案:stackoverflow.com/a/33716219/111438。 PS - 我同意 Ladislav Mrnka 的说法,但是我认为在某些情况下,你需要模拟你的 DbSet 并针对它运行单元测试是不可避免的。尽管您需要记住,您不应该测试您的 LINQ 查询来验证它们是否返回正确的数据。这就是集成测试更适用的地方。
标签: unit-testing entity-framework-4.1