目前,我们有一个数据库实例,适用于所有集成测试。 Oracle数据库模式由一堆DDL同步。然后我们使用dbunit填充并截断测试之间的表。这种方法有两个问题:

  1. 准备数据库的时间超过了花费测试
  2. 有时,通常是测试失败,测试数据泄漏到后续测试并导致更多的故障。
  3. 我想通过每个测试创建内存内存数据库(例如H2)来隔离测试。我计划配置Eclipselink以生成DDL(因为将Oracle DDL转换为其他东西,这将是我想象的噩梦。那点的唯一问题是创建触发器。

    所以我有两个问题...

    1. 我可以从现有的Oracle架构的内存内存数据库(H2或其他),包括触发器吗?
    2. 或者,我可以使用我的entityManager(DDL生成)在内存数据库中创建一个在内存数据库中,并在飞行中创建一堆触发器,但在测试执行之前?
    3. 技术堆栈:

      • Spring:3.2.8
      • Spring Data JPA:1.5.3
      • eclipse链接:2.5.1
      • Oracle:11

      我熟悉如何实例化Spring测试集成环境以加载内存内存数据库。只是不确定如何翻译Oracle的东西(触发器,具体地触发)。

有帮助吗?

解决方案

我可以从现有的Oracle架构的内存数据库(H2或其他),包括触发器吗?

是的,你可以拥有这个。我们将Postgres用于内存数据库的所有物理数据库和HSQL。我们开始使用Hibernate来生成实体类的数据库,但现在迁移到使用Flyway。请记住,您的一些DML和DDL将是oracle的自定义,因此您必须为HSQL或H2定制(使用Flyway使用Flyway)。

或者,我可以使用我的entityManager(DDL生成)在内存数据库中创建一个内存数据库,并在飞行中创建一堆触发器,但在测试执行之前?

您可以清除/填充内存数据库,但您希望。有多种方式:

  1. Flyway测试扩展 - 这使得您可以轻松,并且是我们使用的。 https://github.com/flyway/flyway-test-extensions
  2. 写一个具有测试配置文件@profile(“test”)的Spring Bean,并将插入测试环境的数据。
  3. 使用import.sql脚本。我相信春天的测试线束会寻找这个。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top