在dao单元测试之前生成数据库表

时间:2012-02-05 12:03:07

标签: spring hibernate junit4

我正在为不使用hibernate的spring mvc 3.1应用程序编写单元测试。

我想通过我创建的sql脚本在hsql DB中创建表,以在oracle DB中生成表。

我四处寻找方法,但找不到任何有用的东西。

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

有什么想法吗?

4 个答案:

答案 0 :(得分: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,每次测试执行后都会有回滚,导致表在下一次测试开始之前恢复到原来的已知状态。因此,无需每次测试删除和重新创建表。

答案 1 :(得分: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>

答案 2 :(得分:1)

我认为你需要看一下DBUnit

答案 3 :(得分:0)

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