【问题标题】:How to correctly unit test my DAL?如何正确地对我的 DAL 进行单元测试?
【发布时间】:2010-09-23 12:11:59
【问题描述】:

我是单元测试的新手。但是如何对使用 Entity Framework 编写的 DAL 进行单元测试,以便确保我的 DAL 代码正常工作但实际上没有触及数据库?谁能提供尽可能详细的信息。

【问题讨论】:

    标签: unit-testing entity-framework mocking data-access-layer


    【解决方案1】:

    如果您想测试您的数据访问层是否正常工作,您确实需要在某个时候针对数据库对其进行测试,否则您实际上并没有对其进行测试。

    【讨论】:

    • +1 如果不存在测试数据库,则确实应该创建一个(似乎 OP 关心数据更新)。
    • 模拟的作用是什么,有人能解释一下模拟的使用与测试数据库的作用吗?
    • 测试数据库将是您运行集成测试的对象(DAL 的测试)。模拟将用于替换您的 DAL 进行单元测试,以便您只需测试逻辑而无需实际访问数据库(例如,您可以通过提供模拟来确保您的代码正确调用您的 DAL)。
    【解决方案2】:

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

    【讨论】:

    • 很有趣,从来没想过,我确定我可以用谷歌搜索,但你有代码 sn-p 说明你是如何做到的吗?
    • 这不是单元测试,而是集成测试,这很好。许多框架的集成测试指向一个单独的测试数据库,每个单独的测试都有自动事务。
    • NUnit 是否在测试时自动执行此转换?如果是这样,我该如何配置它来做到这一点?
    • 有趣的方法,但我不确定我是否会使用它,因为您没有完成操作。为什么没有测试后清理的拆卸方法?
    【解决方案3】:

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

    如今,大多数 ORM 都提供某种查询语言,无论是 LINQ 还是 HQL,或其他形式。因为正确的单元测试要求您实际上不访问数据库,所以您必须模拟 ORM,这样做是您能想到的最大痛苦。这不值得,IMO。最终,您只需要测试您是否在代码中编写了正确的查询;您根本没有得到回归值,并且可以通过检查代码更好地服务于您的目的。

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

    【讨论】:

    • 我喜欢上面答案中的 cmets,他们实际上提到 DAL 测试是集成测试而不是单元测试。从这个角度来看,这不应该是痛苦的。测试您是否编写了正确的查询非常重要,为此您应该测试它是否返回正确的结果。
    猜你喜欢
    • 2014-01-30
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多