我正在寻找初始化我的测试h2数据库的方法,其中包含一些来自java代码的初始测试数据,以供将来的测试使用。但我不想使用@Before
注释,因为这些数据将用于所有类的所有测试用例。我已经找到了如何使用带有初始数据的SQL文件来完成此操作。但我不想写SQL插件。我更容易编写一些Java代码,然后将创建的对象保存到数据库中。有可能吗?如果是,请告诉我如何做到这一点。
由于我没有找到我的问题的答案,所以根本不是一个坏主意。如果是的话,请解释一下原因,请?
在我的项目中,我使用的是Spring数据JPA。我是Spring综合测试的新手,只是开始使用它。
答案 0 :(得分:0)
如果您正在使用Datasource
,我建议您以这种方式初始化您的数据库进行单元测试:
使用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>