如果我只想测试JdbcTemplate代码,@ DataJpaTest的等价物是什么?

时间:2016-08-03 14:41:47

标签: java testing spring-boot

Spring Boot 1.4提供了一些出色的测试改进。一个是@DataJpaTest注释,它只连接JPA测试所需的部分。只需将JdbcTemplate测试所需的部件连接起来,等效的是什么?

我可以很好地构建我自己的复合注释,模仿@DataJpaTest一个。

2 个答案:

答案 0 :(得分:19)

好问题。具有讽刺意味的是,昨天在SpringOne平台的测试谈话中提出了这个问题。让我们看看实现这种专用测试注释需要什么。

TL;DR check the code on github

首先,您需要创建注释。此批注重用了spring-boot-test-autoconfigure模块中的一些位。您可能希望自动配置内存数据库(如DataJpaTest)。您还希望确保默认情况下配置和禁用缓存(如果您的Spring Boot应用程序中有@EnableCaching)。您还希望默认情况下所有测试都是@Transactional,因此您应该添加它。

接下来,您希望切片有效地启动。此时您需要的只是DataSourceJdbcTemplate,数据库迁移(flyway / liquibase)和要处理的事务管理器{{1 }}。要避免其他自动配置启动,您应添加以下内容:

@Transactional

然后,您想要明确启用上面的自动配置。为此,您需要添加@OverrideAutoConfiguration(enabled = false) 并在@ImportAutoConfiguration

中添加以下内容
META-INF/spring.factories

# AutoConfigureDataJpa auto-configuration imports com.example.test.autoconfigure.jdbc.DataJdbcTest=\ org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration 中的键应与注释的FQN匹配。每当Spring Boot发现spring.factories没有额外属性时,它将查找与@ImportAutoConfiguration中的注释类型匹配的键。

接下来,您希望能够在过滤器中包含其他组件(组件扫描)。为此,您可以添加spring.factories @TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)DataJdbcTypeExcludeFilter几乎相同(因此我们可能需要为此提取一个公共类)。

完成上述操作后,您只需添加注释即可自动配置DataJpaTypeExcludeFilter

JdbcTemplate

答案 1 :(得分:0)

我认为该选项为@JdbcTest,您可以在文档中找到更多信息。