java – 测试Hibernate DAO,而不是围绕它构建Universe

前端之家收集整理的这篇文章主要介绍了java – 测试Hibernate DAO,而不是围绕它构建Universe前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们有一个使用spring / Hibernate / MySQL构建的应用程序,现在我们想测试DAO层,但这里有一些我们面临的缺点.

考虑多个对象相互连接的用例,例如:Book有Pages.

>如果没有Book,则Page对象不能存在,因为book_id是Page中的强制FK.
>为了测试页面,我必须创建一本书.

这个简单的用例很容易管理,但如果你开始构建一个库,直到你没有创建围绕Book和Page的整个Universe,你就无法测试它!

所以要测试Page;

>创建库
>创建部分
>创建流派
>创建作者
>创建书籍
>创建页面
>现在测试页面.

有没有一种简单的方法可以通过这个“宇宙创建”,只是单独测试页面对象.我还希望能够测试与Page相关的HQL.例如:

SELECT new com.test.BookPage (book.id,page.name) FROM Book book,Page page.

JUnit应该是孤立运行的,所以我必须编写代码来构建测试用例中的所有支持对象来创建Page.有关如何加速该过程的任何提示.

编辑:Spring在测试运行后遵循事务回滚的原则,从而恢复所有更改.随着我们的进一步发展,我们希望能够对模式进行更改,我希望能够定期对生产数据库(备份!)进行测试.

最佳答案
我刚刚用这个确切的配置完成了一个项目.我们使用替代HsqlDB数据库进行单元测试,然后关闭这些测试的模式的参照完整性,取得了巨大的成功.

由于您使用的是Spring,因此这些步骤如下:

>创建新的上下文配置文件以进行测试.设置hibernate为此配置中的架构执行create-drop.
>创建你的junit测试.继承自AbstractTransactionalJUnit4SpringContextTests,它是Universe历史中最伟大的抽象类,并使用您的新@ContextConfiguration注释该类.还可以使用@TransactionConfiguration批注在具有自动回滚的事务中运行每个测试.
>运行命令“SET REFERENTIAL_INTEGRITY FALSE;”通过@Before方法中继承的simpleJdbcTemplate属性.
>将@Before的其余部分专用于设置数据库的simpleJdbcTemplate调用.请注意,您不再需要指定每个引用的列,只需要指定您正在测试的内容
>最后针对您的DAO编写单元测试.

这里有一些参考资料可以帮助您朝着这个方向前进:

> http://static.springsource.org/spring/docs/2.5.x/reference/testing.html
> http://www.theserverside.com/news/1365222/Unit-Testing-Hibernate-With-HSQLDB

像往常一样,让配置恰到好处是困难的部分.但是一旦它全部工作,你将成为一个造型单元测试员!

猜你在找的Spring相关文章