Spring + JUnit + H2 + JPA:是否可以为每个测试删除创建数据库?

2023-11-27

为了保持 JUnit 测试之间的独立性,我需要在每个测试开始时创建数据库,并在每个测试结束时销毁它。

应通过执行 SQL 文件中存在的 SQL 查询(本机插入查询...)在内存中创建数据库(H2 数据库)。

在属性文件中定义键值并遵守 JPA 规范 (persistence.xml),如何使用注释/注入为每个 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring + JUnit + H2 + JPA:是否可以为每个测试删除创建数据库? 的相关文章

随机推荐