我已在连接器字符串和初始化脚本中将 H2 数据源设置为 Oracle 模式SET MODE Oracle;
但是,很多功能无法执行;例如日期trunc
函数,这在我们的代码中很常见。
测试我的数据库应用程序的实用方法是什么?看起来我可能不得不回到我成熟的 QA/Dev 测试 oracle 实例。确实,对于任何人来说,实现 Oracle 的语法副本都是一项艰巨的任务,因此我可以想象任何用于测试的轻量级内存数据库都会错过许多 Oracle 功能。
你一般如何处理这个问题?
我只是发现了一些问题(例如不同的语法)。至少 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% 的测试,那么它会很有用。
我认为应该区分单元测试和集成测试。单元测试不应该有任何外部依赖,你应该模拟你的 DAO 类(例如:使用 Mockito)。应在集成测试期间针对真实数据库进行测试。
您可能已经看到在单元测试期间使用嵌入式数据库的问题是语法可能与生产数据库不同。
缓解这种情况的一种方法是设置一个集成测试环境(例如:使用 Bamboo CI 工具),您可以在其中使用专用的类生产 (Oracle) 数据库进行测试。尽可能多地使用嵌入式数据库进行测试,但对于那些您以后无法在集成环境中测试的情况。
这个集成测试环境将位于开发团队成员共享的自己的服务器上。诸如竹子之类的工具可以自动检测何时进行新的提交,并启动集成测试
Oracle 数据库快捷版是Oracle 数据库,因为它被限制为 1GB 内存和一个线程(从版本 11g 开始),它的占用空间往往比标准版或企业版更轻。