一些原则
1、使用spirng容器,最好是要控制每个容器要注入的范围(避免不需要的注入)
(1)可以使用以下方式进行配置
@ContextHierarchy({@ContextConfiguration(locations = "classpath:spring-bean-test.xml")})
(2)使用单独的@Configuration进行隔离
各种测试方式
1、外部依赖全mock;
场景:单元测试,主要测试内部的代码;
主要使用injectMocks 和 Mock注解
对于没有返回的情况,直接不需要使用when
2、使用spring容器,部分依赖mock;
场景:spring相关代码的测试
eg: 对mq的启动封装(作为spring组件注入),增加了参数之后,需要进行测试,但是本身有n层的spring组件,这个时候,就把不需要测试的组件直接mock掉;
@Configuration
public class TestConfig {
@Bean
public MqConsumeService mqConsumeService(){
return Mockito.mock(MqConsumeService.class);
}
@Bean
public SpringContextHolderConfig springContextHolderConfig(){
return new SpringContextHolderConfig();
}
@Bean
public MqSubscriber mqSubscriber() {
return new MqSubscriber();
}
}
3、使用spring容器,全部不mock
场景:集成测试;