繁体   English   中英

测试实体框架3.5

[英]Testing Entity Framework 3.5

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

如果您正在尝试自行对您的查询进行单元测试,我强烈建议您只设置一个测试数据库并使用实际数据对其进行测试。 使用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,显然你没有。 但是,因为我建议不要使用它进行单元测试,所以答案仍然适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM