测试实体框架3.5

时间:2011-02-16 14:40:37

标签: c# unit-testing entity-framework

当我仅限于EF 3.5实体时,编写单元测试的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您尝试自行对您的查询进行单元测试,我强烈建议您只设置一个测试数据库并使用实际数据对其进行测试。使用IObjectSet<T>代替内存中的集合来运行单元测试是一个不好的想法。 linq查询在linq-to-objects下运行的方式与如何将其解析为T-SQL命令(即如何处理空值)之间存在差异。例如,

db.People.Where(p => p.AccountNum == variable);

如果那是使用linq-to-objects(就像在某些内存对象集中,你已经作为单元测试的IObjectSet<T>的替代),那么它将完美运行。但是,如果你是针对数据库运行的,那么如果变量为null,则查询将中断,因为查询

WHERE [peopleTableAlias].[AccountNum] = @param1
将生成

,@ param1为null,这将毫无价值,因为您确实需要生成IS NULL查询。


如果您想测试调用EF datacontext的业务逻辑,那么我会说将这些查询包装到DataAccess对象中,将您的方法标记为虚拟,将所述DAO注入需要的地方,并在您的单元测试替换了覆盖这些方法的手动模拟,以返回测试所需的值,或者使用您最喜欢的模拟框架(即Rhino)执行相同的操作。

编辑 - 抱歉,IObjectSet<T>仅限于EF4,显然你没有。但是,因为我推荐做单元测试,所以答案仍应适用。