Jer*_*ose 2 unit-testing entity-framework entity-framework-4 entity-framework-4.1
我目前有一个项目,我已经开始使用EF4,我回过头来加入单元测试.我正在使用EF4 POCO T4模板和我的模型(数据库)第一个上下文.我正在为我的DAC逻辑使用通用存储库,并为持久性使用工作单元模式.
但是,我遇到了一些理解如何模拟ObjectContext/ObjectSet的问题.我查看了使用本文中的FakeObjectSet<T>示例,但它仍然留下了一些内容,例如自动递增标识和事务回滚.
所以,我试图找到一个好的EF设计,仍然可以完全单元测试.
我的问题是,EF4.1 DbSet是否解决了很多问题,单元测试EF4?有没有很好的综合性文章来设计可完全测试的EF4.1解决方案?
另外,请记住,我需要一个模型优先的解决方案.
提前致谢.
完全模拟模拟层的行为不是单元测试的重点.单元测试的要点是相信模拟层只是起作用.单元测试验证测试的方法而不是模拟.您将只验证模拟上的正确方法被调用,如果您的业务逻辑需要一些值,您可能会设置一些回调来修改传递的数据.例:
您有一个业务方法将记录插入数据库并在插入后使用实体及其ID.该IObjectSet模拟将被配置为:
AddObject仅被调用一次的期望- 您可以在验证中设置预期的实例AddObject以将Id设置为某个值,并在稍后的测试中使用它DbSet不会有任何区别 - 它只是ObjectSet包含类似的行为.在我看来,没有有效的方法可以使模拟行为像真正的EF一样.使用模拟EF +数据库的行为创建模拟所需的工作量将比整个应用程序的工作量大得多!这将不再是模拟它将是伪造的EF提供商.
如果要测试EF代码(映射,查询,持久)和数据库行为(如自动增量,事务等),则必须编写集成测试.在这里,您有一些相关的问题,讨论存储库,工作单元和测试的挑战: