如果我使用内存数据库而不是PostgreSQL,我的集成测试会运行得更快。我使用JPA(Hibernate),我需要一个内存数据库,它很容易切换到使用JPA,易于设置和可靠。它需要支持JPA和Hibernate(或者如果你愿意的话,反之亦然),因为我不想采用我的数据访问代码进行测试。
根据上述要求,哪个数据库是最佳选择?
答案 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的重构功能。