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

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

我很好地构建我自己的复合注释,模仿@DataJpaTest

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

TL;DR 检查github上的代码

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

接下来,您希望切片有效地完成。此时您需要的只是DataSourceJdbcTemplate ,数据库迁移(flyway / liquibase)和处理@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 

spring.factories的键应该与注释的FQN匹配。 每当Spring Boot找到没有额外属性的@ImportAutoConfiguration时,它将在spring.factoriesspring.factories与注释类型匹配的键。

接下来,您希望能够使用filter包含其他组件(组件扫描)。 为此,您可以添加@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class) ,其中DataJdbcTypeExcludeFilter几乎相同(因此我们可能希望为此提取公共类)。

完成后,您只需添加注释即可自动配置JdbcTemplate

 @RunWith(SpringRunner.class) @DataJdbcTest public class DataJdbcSampleTests { @Autowired private JdbcTemplate jdbcTemplate; ... }