Spring测试从代码初始化数据库

时间:2017-11-21 11:01:24

标签: java spring testing spring-data-jpa

我正在寻找初始化我的测试h2数据库的方法,其中包含一些来自java代码的初始测试数据,以供将来的测试使用。但我不想使用@Before注释,因为这些数据将用于所有类的所有测试用例。我已经找到了如何使用带有初始数据的SQL文件来完成此操作。但我不想写SQL插件。我更容易编写一些Java代码,然后将创建的对象保存到数据库中。有可能吗?如果是,请告诉我如何做到这一点。

由于我没有找到我的问题的答案,所以根本不是一个坏主意。如果是的话,请解释一下原因,请?

在我的项目中,我使用的是Spring数据JPA。我是Spring综合测试的新手,只是开始使用它。

2 个答案:

答案 0 :(得分:0)

如果您正在使用Datasource,我建议您以这种方式初始化您的数据库进行单元测试:

来自Spring documentation

  

使用Spring XML初始化数据库

     

如果要初始化数据库,可以提供参考   到DataSource bean,使用中的initialize-database标记   spring-jdbc命名空间:

<jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="classpath:com/foo/sql/db-schema.sql"/>
        <jdbc:script location="classpath:com/foo/sql/db-test-data.sql"/>
</jdbc:initialize-database>

<强>解释

在用于单元测试的Spring配置中,我假设您定义了一个特定的datasource。在这种情况下,您可以使用仅适用于单元测试的SQL脚本初始化此数据库。

答案 1 :(得分:0)

对于我目前的项目,我使用了DbUnit。您可以在测试开始时和测试后定义具有DB状态的xml。 你可以看看这里。

https://springtestdbunit.github.io/spring-test-dbunit/

您可以将其配置为在application.properties中使用H2 Driver:

dbunit.datasource.h2.drivername=org.h2.Driver
dbunit.datasource.h2.url=jdbc:h2:mem:unit-testing-jpa;MODE=MySQL;DATABASE_TO_UPPER=false;
dbunit.datasource.h2.username=user
dbunit.datasource.h2.password=pwd

测试将如下:

@Test
@DatabaseSetup(value = "InitialDataset.xml")
@ExpectedDatabase(value = "ExpectedDataset.xml", assertionMode = DatabaseAssertionMode.NON_STRICT)
public void test() throws IOException, UnhandledRequestException {
    ...
}

数据集的一个例子是:

<?xml version="1.0"?>
<dataset>
    <user id="1" first_name="john" family_name="doe" />
    <user id="100" first_name="jane" family_name="doe"/>
</dataset>