首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Oracle实例创建内存中的数据库结构

从Oracle实例创建内存中的数据库结构
EN

Stack Overflow用户
提问于 2010-09-24 06:53:35
回答 4查看 25K关注 0票数 34

我有一个应用程序,在这个应用程序中,许多“单元”测试在执行过程中使用与Oracle数据库的真正连接。

可以想象,这些测试需要花费太多的时间来执行,因为它们需要初始化一些Spring上下文,并与Oracle实例通信。此外,我们还必须管理复杂的机制,例如事务,以避免在测试执行后对数据库进行修改(即使我们使用了来自Spring的有用类,比如AbstractAnnotationAwareTransactionalTests)。

因此,我的想法是逐步用内存中的数据库替换这个Oracle测试实例。我将使用hsqldb或者更好的h2

我的问题是知道什么是最好的方法来做到这一点。我主要关注的是内存数据库结构的构建和引用数据的插入。

当然,我可以使用一些工具(如SQL DeveloperTOAD )从Oracle提取数据库结构,然后修改这些脚本以使它们适应hsqldbh2语言。但我不认为这是更好的方法。

事实上,我已经在使用hsqldb的另一个项目上这样做了,但是我已经手动编写了创建表的所有脚本。幸运的是,我只创建了几个表。在这一步中,我的主要问题是将用于创建表的Oracle脚本“转换”为hsqldb语言。

例如,使用以下sql命令在Oracle中创建一个表:

代码语言:javascript
运行
复制
CREATE TABLE FOOBAR (
    SOME_ID NUMBER,
    SOME_DATE DATE, -- Add primary key constraint
    SOME_STATUS NUMBER,
    SOME_FLAG NUMBER(1) DEFAULT 0 NOT NULL);

需要将hsqldb“翻译”为:

代码语言:javascript
运行
复制
CREATE TABLE FOOBAR (
    SOME_ID NUMERIC,
    SOME_DATE TIMESTAMP PRIMARY KEY,
    SOME_STATUS NUMERIC,
    SOME_FLAG INTEGER DEFAULT 0 NOT NULL);

在我当前的项目中,有太多的表不能手动完成.

所以我的问题:

  • ,你能给我什么建议来实现这一点?
  • h2hsqldb提供了一些工具来从Oracle连接生成脚本吗?

技术信息

Java 1.6、Spring 2.5、Oracle 10.g、Maven 2

编辑

关于我的单元测试的一些信息:

在我使用hsqldb的应用程序中,我进行了以下测试:-一些“基本”单元测试,这些测试与DB无关。-对于DAO测试,我使用hsqldb来执行数据库操作,例如CRUD。然后,在服务层,我使用Mockito来模拟DAO对象,以便集中精力于服务测试,而不是整个应用程序(即服务+ dao + DB)。

在我当前的应用程序中,我们有一个最糟糕的场景: DAO层测试需要运行一个Oracle连接。服务层做的是,而不是使用任何模拟对象来模拟DAO。因此,服务测试还需要一个Oracle连接。

我知道模拟和内存中的数据库是两个分离点,我将尽快解决它们。然而,我的第一步是尝试通过内存中的数据库删除Oracle连接,然后我将使用我的Mockito知识来增强测试。

请注意,我还希望将单元测试与集成测试分开。后者将需要访问Oracle数据库,以执行“真正的”测试,但我的主要关切(这就是这个问题的目的)是,今天我的几乎所有单元测试都不是孤立地运行的。

EN

Stack Overflow用户

发布于 2010-09-24 07:12:07

你的单元测试是为了什么?如果它们测试DDL和存储过程的正确工作方式,那么您应该将测试写得“更接近”Oracle:要么没有Java代码,要么没有Spring和其他很好的web接口,完全集中在数据库上。

如果您想测试用Java和Spring实现的应用程序逻辑,那么可以使用模拟对象/数据库连接使测试独立于数据库。

如果您想将工作作为一个整体进行测试(这违背了模块化开发和测试原则),那么您可以虚拟化您的数据库并在该实例上进行测试,而不需要进行一些令人讨厌的不可逆转的修改。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3784843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档