我看到人们基于 EntityFramework(代码优先)测试解决方案的一种方法是为他们的自定义上下文创建接口,其中包含类型 IDbSet(而不是 DbSet)的属性。然后在单元测试中他们使用 InMemoryDbSets。
我是 EntityFramework 的新手,这似乎是一个很好的方法。但它根本不起作用不是吗?当我们使用 InMemory DbSets 时,我们可以创建和运行使用实体对象的任何属性的查询。即使这些是计算出来的属性。但是在运行时,相同的查询将抛出“LINQ to Entities 中不支持指定的类型成员'PropertyName'。仅支持初始化程序、实体成员和实体导航属性。”。
因此,如果您使用带有 IDbSets 的自定义上下文,要么我不理解某些东西(可能),要么根本无法进行单元测试。