使用spring-test框架,它以Junit4为基础,来做单元测试。只加载跟我这次要测试的类有关的代码,其他不加载,不要把整个spring-config环境都加载进来,那样的话每次太慢了。一天就会浪费很多时间。
第一步,引入maven坐标,如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.3.RELEASE</version>
<scope>test</scope>
</dependency>
第二步,写一个测试类,如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:/spring-config-datasource-dbcp.xml","classpath*:/spring-config-dao.xml","classpath*:/spring-config-test.xml"})
public class DaoUmpInterceptorTest {
@Resource
private PluginOrderManager pluginOrderManager;
@Test
public void testUmp(){
long orderId = 27L;
pluginOrderManager.selectNPOrderInfo(orderId);
}
}
看类头文件,@RunWith和@ContextConfiguration,加入这两个,就正式使用上了spring-test框架。
@ContextConfiguration这里面配置了需要加载的文件,比如我这次只需要用到dbcp.xml,dao.xml这两个文件。
重点说下,spring-config-test.xml文件,我们现在很多bean都是通过注解进来的,比如下面这个:
@Service("pluginOrderManager")
public class PluginOrderManagerImpl extends BaseManager implements PluginOrderManager {
这个时候,我们就创建一个spring-config-test.xml文件单独去sccan我要加载的类所在的包路径。像下面这样:
最后,这样下来,只加载了下面3个配置文件,这样要比加载整个spring-config环境快速多了。
补充说明上面的<context:component-scan>标签
· base-package:表示扫描注解类的开始位置,即将在指定的包中扫描,其他包中的注解类将不被扫描,默认将扫描所有类路径;
· resource-pattern:表示扫描注解类的后缀匹配模式,即“base-package+resource-pattern”将组成匹配模式用于匹配类路径中的组件,默认后缀为“**/*.class”,即指定包下的所有以.class结尾的类文件;
· name-generator:默认情况下的Bean标识符生成策略,默认是AnnotationBeanNameGenerator,其将生成以小写开头的类名(不包括包名);可以自定义自己的标识符生成策略;
· use-default-filters:默认为true表示过滤@Component、@ManagedBean、@Named注解的类,如果改为false默认将不过滤这些默认的注解来定义Bean,即这些注解类不能被过滤到,即不能通过这些注解进行Bean定义;
· annotation-config:表示是否自动支持注解实现Bean依赖注入,默认支持,如果设置为false,将关闭支持注解的依赖注入,需要通过<context:annotation-config/>开启。
<context:include-filter>-白名单(针对性加载)
<context:exclude-filter>-黑名单(过滤掉不加载)
两种filter都适用Type的类型: