小编典典

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

spring-boot

Spring Boot
1.4提供了一些出色的测试改进。一种是@DataJpaTest注释,其中仅将JPA测试所需的零件连接起来。仅连接JdbcTemplate测试所需的零件,其等效外观会是什么样?

我很好地构建了自己的模拟注解的复合注解@DataJpaTest


阅读 865

收藏
2020-05-30

共1个答案

小编典典

好问题。具有讽刺意味的是,昨天在SpringOne Platform的测试讨论中提出了这个建议。让我们看看实现这样的专用测试注释需要什么。

TL;DR 检查github上的代码

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

接下来,您希望有效地进行切片。此时,您需要做的是a DataSource,a JdbcTemplate数据库迁移(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.factories

接下来,您希望能够通过过滤器包含其他组件(组件扫描)。为此,您可以添加@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)where
与之DataJdbcTypeExcludeFilter几乎相同的东西DataJpaTypeExcludeFilter(因此我们可能要为此提取一个公共类)。

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

@RunWith(SpringRunner.class)
@DataJdbcTest
public class DataJdbcSampleTests {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    ...
}
2020-05-30