如果我只想测试JdbcTemplate代码,@ DataJpaTest的等价物是什么?
Spring Boot 1.4提供了一些出色的测试改进。 一个是@DataJpaTest
注释,它只连接JPA测试所需的部分。 只需将JdbcTemplate
测试所需的部件连接起来,它的外观会是什么样的?
我很好地构建我自己的复合注释,模仿@DataJpaTest
。
好问题。 具有讽刺意味的是,昨天在SpringOne平台的测试演讲中提出了一个。 让我们看看实现这种专用测试注释需要什么。
TL;DR
检查github上的代码
首先,您需要创建注释。 该注释重用了spring-boot-test-autoconfigure
模块中的一些位。 您可能希望自动配置内存数据库(如DataJpaTest
)。 您还希望确保默认配置和禁用缓存(如果您在Spring Boot应用程序上有@EnableCaching
)。 您还希望默认情况下所有测试都是@Transactional
,因此您应该添加它。
接下来,您希望切片有效地完成。此时您需要的只是DataSource
, 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
中spring.factories
与注释类型匹配的键。
接下来,您希望能够使用filter包含其他组件(组件扫描)。 为此,您可以添加@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)
,其中DataJdbcTypeExcludeFilter
几乎相同(因此我们可能希望为此提取公共类)。
完成后,您只需添加注释即可自动配置JdbcTemplate
@RunWith(SpringRunner.class) @DataJdbcTest public class DataJdbcSampleTests { @Autowired private JdbcTemplate jdbcTemplate; ... }