c# – 在单元测试中进行模拟时,数据库/实体框架与内存列表之间的差异

我最近一直在用模拟进行大量的单元测试.让我觉得有点问题的一件事是查询内存列表(通过模拟我的存储库)和通过实体框架直接查询数据库之间的区别.

其中一些情况可能是:

>测试过滤器参数,该参数对数据库不区分大小写,但区分大小写
对内存集合导致错误的失败.
> Linq语句可能会针对内存集合传递,但会对实体框架失败,因为它们不受支持导致错误传递.

处理或解决这些差异的正确方法是什么,以便在测试中没有错误传递或失败?我非常喜欢嘲笑,因为它让事情变得更快更容易测试.但在我看来,获得真正准确测试的唯一方法是仅针对实体框架/数据库环境进行测试.

最佳答案 除了单元测试之外,您还应该创建集成测试,这些测试针对生产中遇到的真实数据库设置运行.

我不是EF的专家,但是对于NHibernate,你可以创建一个配置,指向SQLite的内存中实例,然后运行快速测试(即在开发周期中你要通过测试)套房尽可能快).当您想要针对真实数据库运行集成测试时,您只需将NHibernate配置更改为指向真实数据库设置并再次运行相同的测试.

如果你无法实现与EF类似的东西,那将会令人惊讶.

点赞