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

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

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

对于集成测试 ,我现在使用H2 (来自HSQLDB的原始作者),而不是HSQLDB。 它更快 (我希望我的测试尽可能快),它有一些很好的function,如兼容模式,开发团队非常敏感(虽然HSQLDB在很久之前一直处于hibernate状态)。

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

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

德比现在支持内存模式 ,它不再标记为实验性。

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

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

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