【问题标题】:Spring test initialize database from codeSpring测试从代码初始化数据库
【发布时间】:2017-11-21 19:23:25
【问题描述】:

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

由于我没有找到问题的答案,所以这可能是个坏主意。如果是,请解释一下为什么?

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

【问题讨论】:

    标签: java spring testing spring-data-jpa


    【解决方案1】:

    对于我当前的项目,我使用了 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>
    

    【讨论】:

    • 谢谢!这就是我要找的东西
    【解决方案2】:

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

    来自Spring documentation

    使用 Spring XML 初始化数据库

    如果你想初始化一个数据库,你可以提供一个参考 到 DataSource bean,在 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 脚本来初始化此数据库。

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2019-05-01
      • 2021-03-28
      • 1970-01-01
      • 2018-04-18
      • 2018-09-27
      相关资源
      最近更新 更多