在说Spring的测试之前,先看一下Spring测试在整个Spring框架中所占的位置:
看上面的这幅图,有一个Test,这就是Spring的测试了,如果说Spring最核心的东西是IOC和AOP,那么添加一个Test也是无可厚非的,因为测试的重要性已经不用再多说了。
现在先看一下传统测试方式,了解一下传统测试方式有哪些弊端,才能够更好的理解Spring测试好处和优势:
可以看到上面的代码段,是我们都用过的测试,那么这种测试有哪些弊端呢:
1.我们需要手动的去启动spring容器
2.测试完成之后,我们并没有正常的关闭spring容器
3.我们每运行一个测试用例,就要重新启动一次Spring容器
4.我们的spring容器是运行在JUnit测试里面的(运行在别人的怀里,完全体现不出来Spring测试给我们带来的好处了。)
好了,看来传统测试方式的弊端,我们就看一下基于spring的测试是怎么实现的:
运行结果:
首先我先描述一下基于Spring的测试的步骤,然后再一一详细的解答:
1.搭建测试环境(基于Spring的测试需要依赖的相关包:test、aop、context和expresstion)
2.在测试类上添加@RunWith注解
3.在测试类上添加@ContextConfiguration注解
4.在测试类中添加一个BeanFactory字段,并且在这个字段上加@Autowired注解
5.在测试中,可以直接通过这个BeanFactory字段拿我们需要的bean(getBean())
好了,我就一一的说一下~
@RunWith注解的作用
1)告诉JUnit,在测试开始的时候,先启动Spring容器,测试结束时,关闭Spring容器
2)自动的把当前这个测试类也加入到Spring容器中进行管理(相当于在spring配置文件中添加了一个<bean>元素)
@ContextConfiguration的作用:
告诉Spring从什么地方加载配置文件,默认情况下是相对路径。
这个有三种写法:1)直接写配置文件的相对路径 2)通过classpath前缀设置文件路径 3)不写
如果@ContextConfiguration后面不指明或者说不写配置文件的路径,那么会按照spring的约定进行加载:
1.测试类同包下的配置文件
2.配置文件名为:测试类-context.xml
@Autowired修饰BeanFactory
使用@Autowired注解,就是自动的把spring创建好的bean容器的引用设置给了这个字段
啦啦啦,完了,与君共勉~