用于集成测试的嵌入式或托管 Oracle 实例

Posted

技术标签:

【中文标题】用于集成测试的嵌入式或托管 Oracle 实例【英文标题】:Embedded or managed Oracle instance for integration tests 【发布时间】:2011-06-27 10:42:48 【问题描述】:

对于 mysql,MXJ 连接器使launch a managed MySQL instance 变得非常容易。

我知道 Oracle 提供了Oracle XE 用于快速设置,但我只找到了需要安装的 RPM 发行版。是否有一个打包整齐的 jar,我可以将其放入类路径并通过调用特定的 JDBC url、la HSQLDB 或 MXJ 来启动?

我有兴趣让开发人员在本地以及我们的持续集成服务器上使用它来运行测试。

【问题讨论】:

【参考方案1】:

简短的回答是否定的。Oracle 是一个庞大的数据库。除其他外,它通常希望自己由自己的特殊用户而不是客户端用户运行。

为简单起见,最好的选择是单独的数据库服务器,每个开发人员在数据库中都有自己的用户名/密码(因此也有自己的独立架构)。

【讨论】:

这令人沮丧,因为 oracle-xe 启动器脚本的长度正好是 666 行。不过,谢谢!我会试一试,看看在不“安装”它的情况下启动 oracle 能走多远。【参考方案2】:

尽管 Oracle 不提供嵌入式数据库,但启动一个运行 Oracle XE 的本地 Docker 容器可能是适应特定于 Oracle 的本地集成测试的理想方式。由于 Docker 容器在设计上本质上是短暂的,因此数据库也可以根据需要完全拆除,以提供干净的沙盒。

我发现DockerHub上的alexeiled/docker-oracle-xe-11g镜像有特别清晰的设置和文档说明:https://hub.docker.com/r/alexeiled/docker-oracle-xe-11g/

启动 Docker 容器后,请务必:

首先按照说明连接到 APEX Web 控制台,登录 然后打开Oracle SQL Developer,首先选择Reset Password...。否则可能会抛出以下错误java.lang.ArithmeticException when attempting to get connection in Oracle 11.2.0.2.0 (64 bit)

如文档所述,docker run 命令还可以设计为在容器启动时自动运行 SQL 脚本,这在 CI/集成测试工作流程中也可能非常有价值。

希望这会有所帮助!

【讨论】:

以上是关于用于集成测试的嵌入式或托管 Oracle 实例的主要内容,如果未能解决你的问题,请参考以下文章

java单元/集成测试中使用Testcontainers

java单元/集成测试中使用Testcontainers

AspNetCore 集成测试多个 WebApplicationFactory 实例?

运行集成测试时嵌入 MongoDB

嵌入式 C++ 系统中的持续集成/单元测试

Liquibase 无法找到用于 4.0 及更高版本的集成测试的更改日志文件