如何进行DAO(db)层单元测试?

时间:2011-04-13 05:05:31

标签: unit-testing junit tdd

因为dao层方法将依赖于数据库中的数据, 在复杂系统中,一些操作将取决于许多表, 通过这种方式,单元测试不可重复且独立,

我想知道TDD层有多好吗?谢谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  

DbUnit是一个针对数据库驱动项目的JUnit扩展(也可用于Ant),除其他外,它将数据库置于测试运行之间的已知状态。这是避免在一个测试用例破坏数据库并导致后续测试失败或加剧损坏时可能发生的无数问题的绝佳方法。

DbUnit也supports各种RDBMS,但我可能会推荐像HSQLDB这样的东西,可以嵌入你的项目/测试中,这样你的单元测试就不依赖于能够连接到数据库位于贵公司地下室的某个地方。 :)虽然,另一方面,您将使用与在生产环境中使用的不同的RDBMS进行测试...