Spring Boot 1.4提供了一些出色的测试改进。一种是@DataJpaTest注释,其中仅将JPA测试所需的零件连接起来。仅连接JdbcTemplate测试所需的零件,其等效外观会是什么样?
@DataJpaTest
JdbcTemplate
我很好地构建了自己的模拟注解的复合注解@DataJpaTest。
好问题。具有讽刺意味的是,昨天在SpringOne Platform的测试讨论中提出了这个建议。让我们看看实现这样的专用测试注释需要什么。
TL;DR 检查github上的代码
TL;DR
首先,您需要创建注释。该注释重用了spring-boot-test- autoconfigure模块中的一些位。您可能想要自动配置内存数据库(就像DataJpaTest这样)。您还想确保默认情况下配置和禁用了缓存(以防您@EnableCaching在Spring Boot应用程序中使用缓存)。您还希望@Transactional默认情况下所有测试都是如此,因此您应该添加它。
spring-boot-test- autoconfigure
DataJpaTest
@EnableCaching
@Transactional
接下来,您希望有效地进行切片。此时,您需要做的是a DataSource,a JdbcTemplate数据库迁移(flyway / liquibase)和要处理的事务管理器@Transactional。为避免其他自动配置启动,您应添加以下内容:
DataSource
@OverrideAutoConfiguration(enabled = false)
然后,您要显式启用上面的自动配置。为此,您添加@ImportAutoConfiguration并将以下内容添加到META- INF/spring.factories
@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.factories。
spring.factories
接下来,您希望能够通过过滤器包含其他组件(组件扫描)。为此,您可以添加@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)where 与之DataJdbcTypeExcludeFilter几乎相同的东西DataJpaTypeExcludeFilter(因此我们可能要为此提取一个公共类)。
@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)
DataJdbcTypeExcludeFilter
DataJpaTypeExcludeFilter
完成此操作后,只需添加注释,即可为您JdbcTemplate自动配置注释
@RunWith(SpringRunner.class) @DataJdbcTest public class DataJdbcSampleTests { @Autowired private JdbcTemplate jdbcTemplate; ... }