2

我看到人们基于 EntityFramework(代码优先)测试解决方案的一种方法是为他们的自定义上下文创建接口,其中包含类型 IDbSet(而不是 DbSet)的属性。然后在单元测试中他们使用 InMemoryDbSets。

我是 EntityFramework 的新手,这似乎是一个很好的方法。但它根本不起作用不是吗?当我们使用 InMemory DbSets 时,我们可以创建和运行使用实体对象的任何属性的查询。即使这些是计算出来的属性。但是在运行时,相同的查询将抛出“LINQ to Entities 中不支持指定的类型成员'PropertyName'。仅支持初始化程序、实体成员和实体导航属性。”。

因此,如果您使用带有 IDbSets 的自定义上下文,要么我不理解某些东西(可能),要么根本无法进行单元测试。

4

1 回答 1

0

好的,我做了很多研究,似乎唯一合理的方法(如果您想公开 IDbSet)是进行集成测试。忘记单元测试吧。

Ladislav Mrnka 在这里总结得非常好。 Entity Framework 4.1 的假 DbContext 进行测试

我还在 Ayende 的博客 ( http://ayende.com/ ) 上看到他就是这样做的。

于 2012-08-20T19:10:38.140 回答