【问题标题】:how to do DAO(db) layer unit test?如何进行 DAO(db) 层单元测试?
【发布时间】:2011-04-13 05:05:31
【问题描述】:

由于dao层的方法会依赖于数据库中的数据, 在复杂的系统中,一些操作将依赖于很多表, 这样单元测试是不可重复和独立的,

我想知道 TDD 层如何做到这一点?谢谢。

【问题讨论】:

    标签: unit-testing junit tdd


    【解决方案1】:

    恕我直言,您正在做某事...如果您正在与 Sql Server 通信,那么您不是在进行单元测试,而是在进行集成测试。如果您进行 TDD,那么您就会意识到这一点并开始将服务器通信放入包装器中,因此您可以存根和模拟任何测试数据,而不是使用像 DbUnit 这样的框架来控制数据库状态。我认为您的业务逻辑不应该直接与数据库或网络服务或其他外部资源联系。如果是这样,很可能除了集成测试之外你永远不会写任何东西。

    【讨论】:

    • 确实像这样的测试更像是集成测试,但不管你给它贴上什么标签,可能仍然需要测试。正如我在回复中提到的,嵌入像 HSQLDB 这样的 RDBMS 将使服务器通信排除在外,但是有没有更好的方法来确保像 ORM 这样的东西按预期工作?有没有像 DbUnit 这样的替代品,它仍然可以为您提供关于调整 Hibernate 映射是否破坏某些东西的准确反馈?
    【解决方案2】:

    DbUnit 这样的测试框架正是您想要的。从他们的网站:

    DbUnit 是针对数据库驱动项目的 JUnit 扩展(也可与 Ant 一起使用),其中包括在测试运行之间将您的数据库置于已知状态。这是避免当一个测试用例损坏数据库并导致后续测试失败或加剧损坏时可能发生的无数问题的极好方法。

    DbUnit 也 supports 各种 RDBMS,但我可能会推荐类似 HSQLDB 的东西,它可以嵌入到您的项目/测试中,因此您的单元测试不依赖于能够连接到您的某处的数据库公司地下室。 :) 不过,另一方面,您将使用与在生产环境中使用不同的 RDBMS 进行测试...

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2016-03-15
      • 1970-01-01
      • 2012-05-14
      • 2019-11-15
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多