如果我使用内存数据库而不是 PostgreSQL,我的集成测试会运行得更快。我使用 JPA (Hibernate),我需要一个内存数据库,它可以轻松切换到使用 JPA、易于设置且可靠。它需要相当广泛地支持 JPA 和 Hibernate(如果你愿意,也可以反过来),因为我不想采用我的数据访问代码进行测试。
鉴于上述要求,什么数据库是最佳选择?
如果我使用内存数据库而不是 PostgreSQL,我的集成测试会运行得更快。我使用 JPA (Hibernate),我需要一个内存数据库,它可以轻松切换到使用 JPA、易于设置且可靠。它需要相当广泛地支持 JPA 和 Hibernate(如果你愿意,也可以反过来),因为我不想采用我的数据访问代码进行测试。
鉴于上述要求,什么数据库是最佳选择?
我一直在使用内存中的HSQLDB 来集成测试 Java 中的 JPA/Hibernate 持久性。启动很快,不需要任何特殊设置。
到目前为止,我在 Hibernate 中使用 HSQLDB 时看到的唯一问题是批量大小需要设置为 0,但这可能与旧版本有关。我会进行挖掘,看看是否可以找到该问题的详细信息。
如今,Derby 支持内存模式,它不再被标记为实验性的。
我用德比。一方面,每个单元测试的代码行数减少了大约 3 行,因为测试后不需要关闭。但是,您需要使用可以删除和创建表的 JPA 实现,例如 EclipseLink。
Derby 还可以从一个文件初始化一个新的内存数据库,这样您就可以拥有一个参考数据库并随时恢复到它。
不过,对于单元测试,我更喜欢在单元测试的 @Before 逻辑中创建对象实际上依赖于静态结构,重构意味着手动更改 DBunit XML,而不是依赖于 Eclipse 的重构功能。