如何使用Oracle作为嵌入式数据库在maven中运行单元测试?

时间:2016-06-03 07:11:50

标签: oracle maven junit

我有一个prod / test / qa数据库只有Oracle的应用程序。 此外,我怀疑SQL查询是特定于Oracle的。 不幸的是,这个应用程序有第二个没有单元测试。

因此,我希望实现单元测试,特别是关于搜索组件(显然执行大量Oracle操作,包括创建表)。

通常,当我想运行测试时,我会启动一个嵌入式数据库(HSQL,作为示例),在该数据库上运行我的测试,并在测试结束时让它逐渐消失。

由于我对此应用程序的标准化级别缺乏信心,我宁愿在Oracle数据库上运行测试。因此,我想在测试开始时启动oracle数据库,用一些测试数据填充它并在测试结束时停止它。我怎样才能在maven环境中做到这一点?

2 个答案:

答案 0 :(得分:3)

我知道你想要Oracle,但你也可以使用oracle mode flag

尝试使用h2
jdbc:h2:~/test;MODE=Oracle

我在大多数项目中都有同样的需求,这是我发现的最接近Oracle的。您可以为少数缺少的函数定义别名

答案 1 :(得分:2)

您可以使用exec-maven-plugin在Maven生命周期内启动任何应用程序,包括完整的Oracle实例。但是,您仍然需要在构建器等上安装它,这会使解决方案变得相当复杂。

那么我们在另一个项目中做了什么:

  1. 将唯一的构建名称定义为Maven属性(默认为本地构建的用户名;让CI通过-D提供此功能,例如,在Bamboo上,您可以包含构建计划密钥和编号)
  2. 连接到我们基础架构上的共享Oracle实例
  3. 根据定义的构建名称
  4. 创建新方案
  5. 使用DDL更新新的空方案(我们在生产中使用Flyway,因此这部分很简单)
  6. 运行集成测试
  7. 在集成后测试阶段删除方案(因为构建可以手动停止或挂起,所以仍然需要对陈旧方案进行某种自动数据库清理)
  8. 您可以使用sql-maven-plugin来执行SQL脚本。或flyway-maven-plugin如果使用Flyway。