2012-02-05 61 views
3

我正在为未使用hibernate的spring mvc 3.1应用程序编写单元测试。在dao单元测试之前生成数据库表

我想通过我创建的sql脚本在hsql数据库中创建表以在oracle数据库中生成表。

我环顾四周寻找方法来做到这一点,但找不到有用的东西。

理想情况下,我想在安装过程中创建表,执行测试,然后删除表。

任何想法?

回答

3

您是否看过Spring文档中的Embedded Database Support

这样创建数据库:

<jdbc:embedded-database id="dataSource"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:test-data.sql"/> 
</jdbc:embedded-database> 

(您也可以选择指定类型,但它默认为HSQL)。将适当的HSQL依赖关系添加到您的类路径中。

嵌入式数据库将在创建应用程序上下文时创建。通过进行测试@Transactional,每次测试执行后都会回滚,导致表在下一次测试开始前恢复到其原始的已知状态。因此,不需要删除并重新创建每个测试的表格。

+0

感谢您给我们〜!这有帮助。由于我想使用HSQL作为Oracle生产数据库的测试数据库,因此我最终使用了稍微不同的配置。 – Eric 2012-02-06 05:36:26

0

要执行SQL脚本,请查看SimpleJdbcTestUtils。

1

我认为你需要看看DBUnit

+0

DBUnit不创建表。它只加载数据。 – 2016-12-07 14:02:16

3

谢谢@matsev这个〜!这有帮助。由于我想使用HSQL作为Oracle生产数据库的测试数据库,因此我最终使用了稍微不同的配置。

我最终什么事做的是:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
    <property name="url" value="jdbc:hsqldb:mem:test;sql.syntax_ora=true"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
</bean> 
<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS"> 
    <jdbc:script location="file:Artifacts/sql/install.sql"/> 
    <jdbc:script location="file:Artifacts/sql/patchset/1.0.0.02.create_survey_tables.sql"/> 
    <jdbc:script location="file:Artifacts/sql/patchset/1.00.01.update.sql"/> 
    <jdbc:script location="file:Artifacts/sql/patchset/1.00.03.insert_surveyQA2.sql"/> 
    <jdbc:script location="file:Artifacts/sql/patchset/1.00.05.insert_surveyQA4.sql"/> 
</jdbc:initialize-database>