2011-02-16 148 views
3

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

+0

你想要单元测试什么?你能提供更多的信息,说明你正在尝试做什么或有什么问题? – Jeff 2011-02-16 14:43:04

回答

0

如果你想自己单元测试你的查询,我强烈推荐你设置一个测试数据库并用真实数据测试它们。使用IObjectSet<T>为了替代内存中的集合以便单元测试运行是一个糟糕的想法。在linq-to-objects之下运行linq查询的方式,以及如何将其解析为T-SQL命令,即如何处理空值之间存在差异。例如,

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

如果这是使用LINQ到对象(如你的埋入在为IObjectSet<T>的单元测试的替代设置一些内存对象),然后将完美运行。然而,如果你正在运行的是针对数据库,那么如果变量为空,您的查询将打破,因为

WHERE [peopleTableAlias].[AccountNum] = @param1 

查询,将会产生与@参数1是空,这将是毫无价值的,因为你真的需要生成一个IS NULL查询。


然而,如果你想测试你的业务逻辑,它调用你的EF DataContext的,那么我会说包裹起来这些查询到数据访问对象,标记你的方法是虚拟的,注射称需要它们的地方的DAO ,在你的单元测试中,用手动模拟替代那些方法来为测试返回所需的值,或者用你最喜欢的模拟框架(即Rhino)做同样的事情。

EDIT - 对不起,IObjectSet<T>仅限于EF4,显然你没有。但由于使用该单元测试是我推荐的而不是,所以答案仍然适用。

+0

我要测试的课程是DAL。所以建立一个测试分贝似乎是正确的路要走。你有没有关于使用测试数据库或我需要注意的任何好的提示? – Ols1 2011-02-16 16:07:17