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



我正在为一个不使用hibernate的springmvc3.1应用程序编写单元测试。

我想通过我创建的sql脚本在hsqlDB中创建表,以在oracleDB中生成表。

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

理想情况下,我希望在设置期间创建表,执行测试,然后删除表。

有什么想法吗?

您看过Spring文档中的嵌入式数据库支持吗?

创建这样的数据库:

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

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

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

感谢@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>

我认为您需要查看DBUnit

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

最新更新