Spring Boot 1.4提供了一些出色的测试改进。一个是@DataJpaTest
注释,它只连接JPA测试所需的部分。只需将JdbcTemplate
测试所需的部件连接起来,等效的是什么?
我可以很好地构建我自己的复合注释,模仿@DataJpaTest
一个。
答案 0 :(得分:19)
好问题。具有讽刺意味的是,昨天在SpringOne平台的测试谈话中提出了这个问题。让我们看看实现这种专用测试注释需要什么。
TL;DR
check the code on github
首先,您需要创建注释。此批注重用了spring-boot-test-autoconfigure
模块中的一些位。您可能希望自动配置内存数据库(如DataJpaTest
)。您还希望确保默认情况下配置和禁用缓存(如果您的Spring Boot应用程序中有@EnableCaching
)。您还希望默认情况下所有测试都是@Transactional
,因此您应该添加它。
接下来,您希望切片有效地启动。此时您需要的只是DataSource
,JdbcTemplate
,数据库迁移(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,您可以在文档中找到更多信息。