要保持junit测试之间的独立性,我需要在每个测试的开头创建数据库,并在每个测试结束时将其销毁。
应通过执行SQL文件中存在的SQL查询(本机插入查询...)。
来创建数据库(H2数据库)。在属性文件中定义我的键值并尊重JPA规范(Persistence.xml),如何使用注释/注射为每个JUNIT测试为每个JUNIT测试创建Drop数据库?
非常感谢!
您应该能够使用Spring的嵌入式数据库配置指定H2 DataSource(也在此处显示):
<jdbc:embedded-database id="dataSource" type="H2">
<!-- Modify locations appropriately for your environment -->
<jdbc:script location="classpath:db-schema.sql"/>
<jdbc:script location="classpath:db-test-data.sql"/>
</jdbc:embedded-database>
应该在适当的名称空间声明的特定于测试的testApplicationContext.xml
中进行。
Spring将在测试套件(测试类)开头的测试应用程序上下文时创建H2 DataSource。因为Spring在测试类过程中缓存了应用程序上下文,因此您可以使用@DirtiesContext
注释测试类,以便重新创建应用程序上下文,并针对每个测试方法重新定位数据:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:/your/testApplicationContext.xml"})
@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD)
public class SomeDatabaseTest {
@Autowired
private SomeDao dao;
// Test methods
}
可以在此处找到有关春季嵌入式数据库功能的更多信息
您可能应该使用JPA或春季功能,但仅出于完整性:
在数据库侧,H2在打开数据库时支持运行的初始脚本:
jdbc:h2:mem:test;INIT=runscript from '~/create.sql'
或
jdbc:h2:mem:test;INIT=runscript from 'classpath:/com/acme/create.sql'
,当您关闭内存数据库(如上面的示例)时,数据将删除。或者您可以运行SQL语句drop all objects
。
jpa2.1初始化EMF时支持模式的滴和创建。