16

如果我使用内存数据库而不是 PostgreSQL,我的集成测试会运行得更快。我使用 JPA (Hibernate),我需要一个内存数据库,它可以轻松切换到使用 JPA、易于设置且可靠。它需要相当广泛地支持 JPA 和 Hibernate(如果你愿意,也可以反过来),因为我不想采用我的数据访问代码进行测试。

鉴于上述要求,什么数据库是最佳选择?

4

3 回答 3

18

对于集成测试,我现在使用比 HSQLDB 更喜欢的H2(来自 HSQLDB 的原作者)。它更快(我希望我的测试尽可能快),它有一些很好的特性,比如兼容模式,开发团队反应非常迅速(而 HSQLDB 一直处于休眠状态直到最近)。

于 2010-08-09T22:52:52.330 回答
4

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

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

如今,Derby 支持内存模式,它不再被标记为实验性的。

于 2010-08-09T21:16:06.467 回答
2

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

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

不过,对于单元测试,我更喜欢在单元测试的 @Before 逻辑中创建对象实际上依赖于静态结构,重构意味着手动更改 DBunit XML,而不是依赖于 Eclipse 的重构功能。

于 2011-09-05T03:48:42.900 回答