2011-04-13 59 views
0

因为DAO层的方法将依赖于在复杂系统中的数据库, 数据的一些操作将取决于大量的表格中, 这样的单元测试是不可重复的,独立的,如何做DAO(db)图层单元测试?

我不知道如何良好的TDD层做到这一点?谢谢。

回答

1

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

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

的DbUnit也supports各种RDBMS的,但我可能会建议像HSQLDB,它可以让你的单元测试不依赖于能够某处连接到数据库在贵公司的嵌入到你的项目/测试地下室。 :)虽然,在另一方面,你会使用不同的RDBMS测试比你会使用在生产环境中...

2

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

+0

这是真的,像这样的测试更像集成测试,但无论哪个标签你穿上它,有可能仍然是一个需要进行测试。正如我在我的回应中提到,像嵌入的HSQLDB RDBMS将服务器通信的方程,但有没有按照预期的工作,确保类似的事情ORM的更好的方法?有没有类似DbUnit的替代方法,它仍会给你提供关于是否调整Hibernate映射的某些准确反馈? – spaaarky21 2011-04-13 13:39:23