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

Unit testing 如何进行DAO(db)层单元测试?,unit-testing,junit,tdd,Unit Testing,Junit,Tdd,由于dao层方法将依赖于数据库中的数据, 在复杂系统中,一些操作将依赖于大量的表, 这样,单元测试是不可重复和独立的 我想知道TDD层在这方面有多好?thx 像这样的测试框架正是您想要的。从他们的网站: DbUnit是一个JUnit扩展(也可用于Ant),其目标是数据库驱动的项目,这些项目在测试运行之间将数据库置于已知状态。这是一个很好的方法,可以避免在一个测试用例损坏数据库并导致后续测试失败或加剧损坏时可能出现的大量问题 DbUnit还提供了各种RDBMS,但我可能会推荐类似的东西,它可以嵌入

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

我想知道TDD层在这方面有多好?thx

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

DbUnit是一个JUnit扩展(也可用于Ant),其目标是数据库驱动的项目,这些项目在测试运行之间将数据库置于已知状态。这是一个很好的方法,可以避免在一个测试用例损坏数据库并导致后续测试失败或加剧损坏时可能出现的大量问题

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

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

DbUnit是一个JUnit扩展(也可用于Ant),其目标是数据库驱动的项目,这些项目在测试运行之间将数据库置于已知状态。这是一个很好的方法,可以避免在一个测试用例损坏数据库并导致后续测试失败或加剧损坏时可能出现的大量问题


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

。。。如果您正在与Sql Server通信,那么您不是在进行单元测试,而是在进行集成测试。如果您使用TDD,那么您就会意识到这一点,并开始将服务器通信放入包装器中,这样您就可以存根和模拟任何测试数据,而不是使用DbUnit之类的框架来控制数据库状态。我认为您的业务逻辑不应该直接与数据库、Web服务或其他外部资源接触。如果是的话,很有可能你只会写集成测试

我知道你在做什么。。。如果您正在与Sql Server通信,那么您不是在进行单元测试,而是在进行集成测试。如果您使用TDD,那么您就会意识到这一点,并开始将服务器通信放入包装器中,这样您就可以存根和模拟任何测试数据,而不是使用DbUnit之类的框架来控制数据库状态。我认为您的业务逻辑不应该直接与数据库、Web服务或其他外部资源接触。如果是的话,很有可能你只会写集成测试

诚然,像这样的测试更像是集成测试,但不管你给它贴上什么标签,可能仍然需要测试。正如我在回复中提到的,嵌入像HSQLDB这样的RDBMS将使服务器通信脱离平衡,但是有没有更好的方法来确保像ORM这样的东西按预期工作?有没有一种方法可以替代DbUnit这样的工具,它仍然可以为您提供关于调整Hibernate映射是否会破坏某些东西的准确反馈?诚然,像这样的测试更像是集成测试,但不管您给它贴上什么标签,可能仍然需要进行测试。正如我在回复中提到的,嵌入像HSQLDB这样的RDBMS将使服务器通信脱离平衡,但是有没有更好的方法来确保像ORM这样的东西按预期工作?是否有一种替代DbUnit的方法,它仍然可以为您提供关于调整Hibernate映射是否会破坏某些东西的准确反馈?