我看到人们基于EntityFramework(代码优先)测试解决方案的方法之一是为其自定义上下文创建接口,该上下文包含IDbSet类型(而不是DbSet)的属性。然后在单元测试中,他们使用InMemoryDbSets。
我是EntityFramework的新手,这似乎是很好的方式。但它根本不起作用吗?当我们使用InMemory DbSets时,我们可以创建和运行使用实体对象的任何属性的查询。即使那些是计算属性。但在运行时期间,相同的查询将抛出“LINQ to Entities中不支持指定的类型成员'PropertyName'。仅支持初始值设定项,实体成员和实体导航属性。”。
所以要么我不理解某些东西(可能),要么在使用IDbSets的自定义上下文时根本无法进行单元测试。
答案 0 :(得分:0)
好的,我做了很多研究,似乎唯一合理的方法(如果你想公开IDbSet)就是进行集成测试。忘掉单元测试吧。
Ladislav Mrnka非常好地总结了这一点。 Fake DbContext of Entity Framework 4.1 to Test
我也在Ayende的博客(http://ayende.com/)上看到这就是他这样做的方式。