代码之家  ›  专栏  ›  技术社区  ›  topchef

支持JPA支持的快速Java集成测试内存数据库

  •  15
  • topchef  · 技术社区  · 14 年前

    如果我使用内存数据库而不是PostgreSQL,我的集成测试将运行得更快。我使用JPA(Hibernate),我需要一个内存中的数据库,可以很容易地切换到使用JPA、易于设置和可靠。它需要非常广泛地支持JPA和Hibernate(如果您愿意的话,也可以支持ViceVerse),因为我不希望在测试中采用我的数据访问代码。

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

    3 回复  |  直到 7 年前
        1
  •  19
  •   Pascal Thivent    14 年前

    为了 集成测试 我现在用 H2 (来自hsqldb的原作者)我比hsqldb更喜欢。它是 faster (我希望我的测试尽可能快),它有一些很好的特性,比如 compatibility 模式下,开发团队的响应能力非常强(尽管hsqldb在最近几年内一直处于休眠状态)。

        2
  •  4
  •   Sled bayer    7 年前

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

    到目前为止,我看到的将hsqldb与hibernate结合使用的唯一问题是需要将批大小设置为0,但这可能与旧版本有关。我去挖一挖,看看能不能找到那个问题的细节。

    Derby supports an in-memory mode 如今,它已不再是实验性的了。

        3
  •  2
  •   Archimedes Trajano    13 年前

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

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

    不过,对于单元测试,我更喜欢在单元测试的@before逻辑中创建我的对象,尤其是在jpa中,因为它允许我灵活地进行重构,而不必担心底层数据库结构,其他工具(如dbunit)实际上依赖于静态结构,重构意味着dbuni的更改。手动执行XML,而不是依赖Eclipse的重构功能。