【发布时间】:2012-08-19 04:08:46
【问题描述】:
我不可能是唯一遇到此问题的人,所以我正在寻找建议。
我们在 Oracle 上运行我们的应用程序,但我们的集成测试使用 h2 进行快速内存测试,该数据库在测试开始时使用 DDL 脚本构建。
问题在于 Oracle 和 h2/hsqldb 之间某些 DDL 命令的使用/语法不同。例如,今天我花了一些时间才意识到“grant select on ...”适用于 Oracle 中的序列,但仅适用于 h2 中的表。
在之前的项目中,我们有一个适配器来删除/翻译此类错误命令,这意味着我们的测试数据库运行的代码与我们在 prod 中实现的代码完全不同。虽然一切都经过了非常彻底的验收测试,但这意味着某些问题可能要到开发周期的后期才能发现。
在我的最新项目中,我感觉我正在走同样的路 - 所以肯定其他人也曾走过它。
有什么建议吗?我们正在使用 java/maven,所以欢迎提供合适的解决方案!
【问题讨论】:
-
您有没有机会引入 ORM(如 Hibernate)来抽象出这些差异?我们在测试阶段也有类似的 Oracle 设置和单元测试阶段的 HSQLDB 设置,并且 ORM 到目前为止运行良好。
-
这是对“集成测试”这个术语的使用,迄今为止我并不熟悉。以我的经验,集成测试是您在一个环境中测试新软件的点,该环境尽可能地反映生产目标。 IMO 使用完全不同的数据库“进行快速内存测试”是不经济的。
-
@BobJarvis - 我将测试称为集成测试,因为我们中间的纯粹主义者(我不是我可能会添加的人)不喜欢将这些称为单元测试。同样,在构建周期中快速运行并运行数据库的小规模测试非常有用 - 如果 Oracle 有一个便宜/免费的内存数据库,我会使用它,但他们没有,所以这就是我们的路径拿。完整的集成测试(我们称之为系统集成)当然会使用生产目标数据库。
-
@DaveRlz 为什么不直接安装 Oracle XE 并将其挂载到 ramfs 分区上?这将是您从 Oracle 获得的最接近免费内存数据库的方式。