使用 @DataJpaTest 设置自定义方案

Posted

技术标签:

【中文标题】使用 @DataJpaTest 设置自定义方案【英文标题】:Setting up custom scheme using @DataJpaTest 【发布时间】:2017-05-11 15:51:40 【问题描述】:

我想用 Spring Boot 测试一个存储库,并希望包含 TestEntityManager 来检查存储库是否真的做了它应该做的事情。

这就是 JUnit 测试:

@RunWith(SpringRunner.class)
@DataJpaTest
public class MyRepositoryTest 

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private MyRepository repository;

    ...

对于其他 JUnit 测试,我有一个 application-junit.properties 文件,该文件设置了包含一些表、索引、序列和约束的模式:

spring.datasource.url=jdbc:h2:mem:testdb;Mode=Oracle;INIT=create schema if not exists testdb\\;SET SCHEMA testdb\\;runscript from 'classpath:create.h2.sql';
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.hibernate.ddl-auto=none
spring.datasource.continue-on-error=true

#datasource config
spring.database.driver-class-name=org.h2.Driver
spring.database.jndi-name=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true

现在,DataJpaTest 似乎没有使用此配置。即使我添加了@ActiveProfiles("junit")。

如何让 JUnit 测试使用我的 create.h2.sql 文件来设置表?

提前致谢, 妮娜

【问题讨论】:

【参考方案1】:

这不是因为@DataJpaTest 取代了your configured datasource by an in-memory data source。

如果您不希望这样,junit 特殊配置文件显然就是这种情况,您需要指示 Spring Boot 不要覆盖您配置的DataSource。我在上面给出的链接中的文档中有一个示例。本质上,您的测试应该如下所示:

@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("junit")
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class MyRepositoryTest 
   ...

您应该考虑创建一个元注释来共享最后两个(三个?)注释,这样您就不必一遍又一遍地重复。

【讨论】:

以上是关于使用 @DataJpaTest 设置自定义方案的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:使用热力图可视化dataframe数据自定义设置热力图的颜色自定添加标题轴标签热力图线框等

Spring Boot:使用 @DataJpaTest 和 Flyway 设置 Hibernate 命名策略

office2010的PPT怎么自定义播放

从自定义工作项内部参考 Wiki 页面

ios10自定手势有啥用

通过使用 MySQL 的 DataJpaTest 存储库测试,Hibernate 不会在 H2 DB 中将用户设置为自动增量