che*_*tts 10 java testing spring-boot
Spring Boot 1.4提供了一些出色的测试改进.一个是@DataJpaTest注释,它只连接JPA测试所需的部分.只需连接JdbcTemplate测试所需的部件即可获得相同的效果?
我很好地构建我自己的复合注释,模仿那个@DataJpaTest.
Ste*_*oll 20
好问题.具有讽刺意味的是,昨天在SpringOne平台的测试谈话中提出了这个问题.让我们看看实现这种专用测试注释需要什么.
TL;DR 检查github上的代码
首先,您需要创建注释.该注释重用了spring-boot-test-autoconfigure模块中的一些位.您可能希望自动配置内存数据库(DataJpaTest如果).您还希望确保默认配置和禁用缓存(如果您使用的@EnableCaching是Spring Boot应用程序).您还希望所有测试都是@Transactional默认的,因此您应该添加它.
接下来,您希望切片有效地完成.此时您需要的只是a DataSource,a JdbcTemplate,数据库迁移(flyway/liquibase)和要处理的事务管理器@Transactional.要避免其他自动配置启动,您应添加以下内容:
@OverrideAutoConfiguration(enabled = false)
Run Code Online (Sandbox Code Playgroud)
然后,您要显式启用上面的自动配置.为此,您添加@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
Run Code Online (Sandbox Code Playgroud)
键入spring.factories应与您的注释的FQN匹配.每当Spring Boot @ImportAutoConfiguration找不到额外的属性时,它将查找与注释类型匹配的键spring.factories.
接下来,您希望能够使用过滤器包含其他组件(组件扫描).为了做到这一点,你可以添加@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)在那里DataJdbcTypeExcludeFilter是几乎同样的事情,DataJpaTypeExcludeFilter(所以我们可能要提取一个普通类).
完成后,您只需添加注释即可JdbcTemplate自动配置
@RunWith(SpringRunner.class)
@DataJdbcTest
public class DataJdbcSampleTests {
@Autowired
private JdbcTemplate jdbcTemplate;
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2237 次 |
| 最近记录: |