DAO层测试时如何模拟序列

how to simulate sequence during DAO layer test

我有 spring+hibernate 项目,我想为 DAO 层编写单元测试用例, 目前我正在使用 HSqldb 的内存数据库来测试它。 (我提到了 this

在项目中,ID 由序列提供,因为我使用的是内存数据库,在测试过程中序列不存在,所以它正在下降,为了解决这个问题,我创建了一组不同的没有序列的 hbm 文件(并将他们测试的资源文件夹)。有没有更好的方法来处理这个问题,因为保留重复的 hbm 文件对我来说确实不错。任何建议将不胜感激

持有 HBM 文件的完整副本听起来不是个好主意(我坚信的原则之一是 the "DRY" principle)。 我建议的解决方案(除非 Hibernate 方面有更好的解决方案)是在“@before”方法中编辑 HBM 文件,以便仅更改不同的位。 我更像是一个 .Net 人,我知道在 .Net 中有一个名为 FluentNHibernate 的库,它允许在运行时生成(我假设也编辑现有的)hbm。我不确定 Java 中是否有类似的东西,但您也可以回退将 hbm 作为 XML 文件进行操作。

如果您的测试数据库中需要一个序列,只需创建它即可。

此外,请确保您使用 Hibernate 配置了正确的数据库方言。

详情请参考以下相关问题:

  • Syntax issue with HSQL sequence: `NEXTVAL` instead of `NEXT VALUE`
  • SequenceGenerator problem with unit testing in Hsqldb/H2
  • "correct" way to select next sequence value in HSQLDB 2.0.0-rc8