为了保持 JUnit 测试之间的独立性,我需要在每次测试开始时创建数据库,并在每次测试结束时销毁它。
应该通过执行存在于 SQL 文件中的 SQL 查询( native 插入查询...)在内存(H2 数据库)中创建数据库。
在属性文件中定义我的键值并尊重 JPA 规范(persistence.xml),我如何使用注释/注入(inject)为每个 JUnit 测试创建删除数据库?
十分感谢!
最佳答案
您应该能够使用 Spring 的嵌入式数据库配置来指定 H2 数据源(也显示为 here):
<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 数据源。因为 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
}
有关 Spring 嵌入式数据库功能的更多信息,请访问 here
关于Spring + JUnit + H2 + JPA : Is it possible to drop-create the database for every test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246802/