Unit testing 如何正确地单元测试我的DAL?

Unit testing 如何正确地单元测试我的DAL?,unit-testing,entity-framework,mocking,data-access-layer,Unit Testing,Entity Framework,Mocking,Data Access Layer,我不熟悉单元测试。但我如何对用实体框架编写的DAL进行单元测试,这样我就可以确保我的DAL代码正常工作,但实际上没有触及任何数据库?请有人尽可能详细地介绍一下。如果你想测试你的数据访问层是否正常工作,你真的需要在某个时候对数据库进行测试,否则你就不能真正测试它的工作。当我对DAL进行单元测试时,我使用事务并在单元测试结束时回滚,因此,db是干净的。单元测试DAL是开发中非常常见的难题。在大多数情况下,我建议你跳过它 如今,大多数ORM都提供某种查询语言,可以是LINQ或HQL,也可以是其他风格。

我不熟悉单元测试。但我如何对用实体框架编写的DAL进行单元测试,这样我就可以确保我的DAL代码正常工作,但实际上没有触及任何数据库?请有人尽可能详细地介绍一下。

如果你想测试你的数据访问层是否正常工作,你真的需要在某个时候对数据库进行测试,否则你就不能真正测试它的工作。

当我对DAL进行单元测试时,我使用事务并在单元测试结束时回滚,因此,db是干净的。

单元测试DAL是开发中非常常见的难题。在大多数情况下,我建议你跳过它

如今,大多数ORM都提供某种查询语言,可以是LINQ或HQL,也可以是其他风格。因为一个合适的单元测试要求你不能真正地访问数据库,你必须模仿ORM,而这样做是你能想到的最大的痛苦。这是不值得的,依我看。最终,您只会测试您在代码中编写了正确的查询;您根本得不到回归值,通过检查代码可以更好地服务于您的目的


然而,我并不是说不应该测试DAL的使用;不要尝试单元测试。您仍然应该为您的程序/系统提供一套集成和用户验收测试;让他们来处理测试您的数据访问

+1如果一个测试数据库不存在,那么确实应该创建一个测试数据库(似乎OP关心数据更新)。模拟的作用是什么,有人能解释一下它的用途与测试数据库的作用吗?一个测试数据库将是您运行集成测试所针对的(DAL的测试)。模拟将被用来代替单元测试中的DAL,这样你只需测试实际命中数据库的逻辑(例如,你通过提供模拟来确保你的代码正确调用了DAL)。有趣的是,我从来没有想过,我肯定我可以用谷歌搜索它,但你有关于如何操作的代码片段吗?这不是单元测试,但是集成测试,这很好。许多框架的集成测试都指向一个单独的测试数据库,每个测试都有自动事务。NUnit会做这个自动事务测试吗?如果是这样的话,我该如何配置它来实现这一点呢?这是一种有趣的方法,但我不确定我是否会使用它,因为您没有完成操作。为什么不在测试后使用一种拆卸方法进行清理?