使用H2数据库测试JPA的最佳方法?

时间:2017-04-03 15:07:18

标签: spring jpa junit4 h2

我需要使用spring和Junit测试带有H2数据库的JPA,我在网上找到很多方法,但我不确定最好的那个。

非常感谢你。

3 个答案:

答案 0 :(得分:1)

确实有几种配置Spring / JPA测试套件的方法,很难找到最好的方法。只要它们涵盖了下面提到的要点,您就可以自由使用它们,只需尝试一下,看看哪一套最适合您。

  • 确保管理JPA数据库配置的配置已外部化。您可以通过指定不同的弹簧配置文件或覆盖Spring PropertyConfigurer来实现此目的。对于Spring启动项目,测试的基类可能类似于下面的代码片段:


    @ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class, locations = "classpath:applicationContext-integrationtest.xml")
    @ActiveProfiles("integrationtest")
    @Ignore("An abstract base class for the tests")
    public abstract class AbstractIntegrationTest extends AbstractTransactionalJUnit4SpringContextTests {
    }
  • 确保在集成测试属性文件中覆盖控制数据源配置的属性。主要的DB特定属性是:

    • 数据库用户名(通常在数据源/连接池上设置) - sa
    • 数据库密码(通常在数据源/连接池上设置) - ``
    • 数据库连接URL(通常在数据源/连接池上设置) - jdbc:h2:database/integrationtest
    • 数据库JDBC驱动程序类(通常在数据源/连接池上设置) - org.h2.Driver
    • 数据库方言(通常在EntityManagerFactory JPA提供程序特定配置上设置) - org.hibernate.dialect.H2Dialect

答案 1 :(得分:0)

尝试为Spring应用程序创建测试配置文件,并在该配置文件中创建H2数据源并注入相同的内容。如果您的是Spring引导项目,那么可以使用application-dev.properties或application-test.properties等属性文件来分析数据源。否则,在不同的配置文件下创建不同的bean定义。默认情况下,Maven / Gradle使用profile = test运行测试。

因此,在运行测试时,将获取H2数据库。内存数据库中的H2会更好,因为每次测试开始时都可以删除/创建。

如果你正在寻找任何特定的规范/措施来决定好的方法,请在此评论。

答案 2 :(得分:0)

我正在使用这个库。我工作得非常好,而且不那么大惊小怪。 https://github.com/mmnaseri/spring-data-mock