春季测试从代码初始化数据库



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

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

在我的项目中,我正在使用Spring Data JPA。我是春季集成测试的新手,并且才开始使用它。

对于我当前的项目,我使用了dbunit。您可以在开始和之后定义具有DB状态的XML。您可以在这里看一看。

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

您可以将其配置为在应用程序中使用H2驱动程序。

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>

如果您使用的是Datasource,我建议您以这种方式进行单位测试的数据库:

来自春季文档:

使用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>

说明

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

最新更新