我正在寻找使用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脚本初始化此数据库。