内存数据库简单可靠,支持JPA的快速Java集成测试

时间:2010-08-09 21:14:11

标签: java database jpa testing in-memory-database

如果我使用内存数据库而不是PostgreSQL,我的集成测试会运行得更快。我使用JPA(Hibernate),我需要一个内存数据库,它很容易切换到使用JPA,易于设置和可靠。它需要支持JPA和Hibernate(或者如果你愿意的话,反之亦然),因为我不想采用我的数据访问代码进行测试。

根据上述要求,哪个数据库是最佳选择?

3 个答案:

答案 0 :(得分:19)

对于集成测试,我现在使用H2(来自HSQLDB的原始作者),而不是HSQLDB。它是faster(我希望我的测试能够尽可能快),它有一些很好的功能,如compatibility模式,开发团队非常敏感(而HSQLDB一直处于休眠状态,直到非常最近)。

答案 1 :(得分:4)

我一直在使用HSQLDB in-memory来集成测试Java中的JPA / Hibernate持久性。启动非常快,不需要任何特殊设置。

到目前为止,我使用HSQLDB和Hibernate看到的唯一问题是需要将批量大小设置为0,但这可能与旧版本有关。我会挖掘一下,看看能否找到问题的详细信息。

Derby supports an in-memory mode这些天,它已不再是实验性的。

答案 2 :(得分:2)

我使用德比。一方面,每单元测试大约减少3行代码,因为测试后不需要关闭。但是,您需要使用可以删除并创建诸如EclipseLink等表的JPA实现。

Derby还可以从文件初始化新的内存数据库,这样您就可以拥有一个参考数据库并随时恢复它。

对于单元测试,我更喜欢在我的单元测试中创建我的对象@Before逻辑我发现它更容易,特别是使用JPA,因为它允许我灵活地进行重构而不必担心底层数据库结构,其他工具例如DBunit实际上依赖于静态结构,重构意味着手动更改DBunit XML而不是依赖Eclipse的重构功能。