[技术总结]关于测试

一些原则

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

场景:集成测试;