用触发器初始化符合内存数据库的JDBC,用于集成测试?
-
02-01-2020 - |
题
目前,我们有一个数据库实例,适用于所有集成测试。 Oracle数据库模式由一堆DDL同步。然后我们使用dbunit填充并截断测试之间的表。这种方法有两个问题:
- 准备数据库的时间超过了花费测试
- 有时,通常是测试失败,测试数据泄漏到后续测试并导致更多的故障。
- 我可以从现有的Oracle架构的内存内存数据库(H2或其他),包括触发器吗?
- 或者,我可以使用我的entityManager(DDL生成)在内存数据库中创建一个在内存数据库中,并在飞行中创建一堆触发器,但在测试执行之前?
- Spring:3.2.8
- Spring Data JPA:1.5.3
- eclipse链接:2.5.1
- Oracle:11
我想通过每个测试创建内存内存数据库(例如H2)来隔离测试。我计划配置Eclipselink以生成DDL(因为将Oracle DDL转换为其他东西,这将是我想象的噩梦。那点的唯一问题是创建触发器。
所以我有两个问题...
技术堆栈:
我熟悉如何实例化Spring测试集成环境以加载内存内存数据库。只是不确定如何翻译Oracle的东西(触发器,具体地触发)。
解决方案
我可以从现有的Oracle架构的内存数据库(H2或其他),包括触发器吗?
是的,你可以拥有这个。我们将Postgres用于内存数据库的所有物理数据库和HSQL。我们开始使用Hibernate来生成实体类的数据库,但现在迁移到使用Flyway。请记住,您的一些DML和DDL将是oracle的自定义,因此您必须为HSQL或H2定制(使用Flyway使用Flyway)。
或者,我可以使用我的entityManager(DDL生成)在内存数据库中创建一个内存数据库,并在飞行中创建一堆触发器,但在测试执行之前?
您可以清除/填充内存数据库,但您希望。有多种方式:
- Flyway测试扩展 - 这使得您可以轻松,并且是我们使用的。 https://github.com/flyway/flyway-test-extensions 。
- 写一个具有测试配置文件@profile(“test”)的Spring Bean,并将插入测试环境的数据。
- 使用import.sql脚本。我相信春天的测试线束会寻找这个。
不隶属于 StackOverflow