问题)
- 如何使用 EntityFramework 5 测试我的 ASP.NET MVC4 Web 应用程序?
- 我应该使用像 Moq 这样的模拟框架吗?
介绍
我已经研究这个话题好几个星期了。我找到了很多材料,但我觉得没有什么可以完全回答这个问题。许多信息已有多年历史,可能不适用。
我的情况
我正在构建一个 MVC4 应用程序,它是对现有但过时的应用程序的重建。数据库已经存在(因此是数据库优先的方法),庞大且复杂。理想情况下,我想要的是一个假的“实体”对象,它与我的主要实体对象相同,但使用不同的“模拟”或某种内存数据库,这样我就可以生成一堆假数据,运行测试和收到反馈。例如:
FakeEntities _db = new FakeEntities();
// test a controller action
至今...
据我所知,我应该使用集成测试。根据Ladislav Mrnka 的这篇文章,集成测试意味着测试控制器操作,并意味着 LINQ-to-entities 和 LINQ-to-objects 的问题更少
如果您模拟存储库,您将使用 Linq-To-Objects 并且您将获得绿色测试,但如果您使用 Linq-To-Entities 运行应用程序,您将收到异常
我知道他的意思,我可以同意 - 我想确保我始终使用 Linq-To-Entities 和真实(或接近真实)的数据库。
我已经阅读了很多关于存储库模式的内容,而linush 的这个博客看起来与我可能正在尝试的内容非常接近。事实上,我已经创建了一个虚拟项目,在该项目中我测试了创建通用存储库并成功使用了实体框架和依赖于内存中 ObjectSet 的“模拟”DbContext。
我对这种方法的问题是
- 如上所述,这意味着我使用的是 Linq-To-Objects 而不是 Linq-To-Entities
- 我的网络应用程序将依赖大量使用存储过程
回答前总结
- MVC4、EF5 和 SQL Server(尽管我想保持与数据库无关)
- 能够测试使用 SQL 存储过程的逻辑
- Linq 到实体
- 数据库优先的方法