带有oracle语法的H2嵌入式数据库?

时间:2013-07-17 23:03:28

标签: database spring oracle

我已将H2数据源设置为连接器字符串和初始化脚本中的Oracle模式SET MODE Oracle;

然而,许多功能无法执行;例如日期trunc函数,这在我们的代码中很常见。

测试我的数据库应用程序的实用方法是什么?看起来我可能要回到我的全面的QA / Dev测试oracle实例。事实上,任何人实现Oracle的语法副本都是一项艰巨的任务,所以我可以想象任何用于测试的轻量级内存dbs都会错过许多oracle功能。

你如何处理这个问题?

3 个答案:

答案 0 :(得分:0)

在我看来,应区分单元测试和集成测试。单元测试不应该有任何外部依赖,你应该模拟你的DAO类(例如:使用Mockito)。应在集成测试期间对真实数据库进行测试。

您可能已经看到在单元测试期间使用嵌入式数据库的问题是语法可能与生产数据库不同。

缓解这种情况的一种方法是设置集成测试环境(例如:使用Bamboo CI工具),您可以在其中使用专用的类似生产(Oracle)数据库进行测试。尽可能使用嵌入式数据库进行测试,但对于那些以后无法在集成环境中进行测试的人。

此集成测试环境将位于开发团队成员共享的自己的服务器上。诸如bamboo之类的工具可以在新提交时自动检测,并启动集成测试

答案 1 :(得分:0)

我只是发现了一些问题(例如,不同的语法)。至少HSQLDB允许您配置"语法模式"。例如:

您可以使用此语法对其进行配置(请参阅URL的最后一部分):

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:mem:PUBLIC:syntax.ora=true" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

我将允许hibernate创建表,因此我对ddl有一个很好的数据库抽象。但无论如何它会有局限性。可能需要一个测试数据库,但如果您能够使用嵌入式快速数据库执行90%的测试,那么我将非常有用。

答案 2 :(得分:0)

Oracle数据库快捷版 Oracle数据库,因为它仅限于1GB内存和一个线程(从版本11g开始),它的占用空间往往比标准版更轻或企业版。