前几天看
UIC-TEST
代码时,顺便也研究了下
SpringTest,
遇到了不少问题,在这里贴出来,以供后人查看,提高他们的学习效率
SpringTest
并不是一个完整的测试框架,它只是为测试提供一些必要的服务,其基石还是
JUnit!
那么它提供的是什么服务呢
?
下面我们先来研究一下这个问题
众所周知,我们的开发人员使用
spring
的依赖注入解决软件构件之间的耦合问题,那我们的测试代码是否也会存在耦合问题呢?我们是针对接口进行测试,但是在执行一个测试类的测试方法之前,我们需要为这个测试方法准备测试场景,不可避免的是要生成一个待测接口的实现类的实例
,
如下图
:
这样做的不好之处在于,如果开发人员更换了接口的实现类,那么我们的测试代码也要做相应的修改以适应新的实现类。如何在不修改代码的情况下就能使我们的测试代码快速切入到新的实现类呢
?spring-test
凭借
spring
的原生特性给我们提供了这种便捷
.
下面我们根据一个简单的例子来展示
spring-test
是如何工作的,最关键的是要理解
spring
在什么时候为我们的测试注入接口的实现类对象
,
这也是本文主要的分享点
!
请看下面代码
:
上面那个问题,往往成为菜鸟的一个障碍
,
当时我在研究类似代码的时候也感到很迷茫
,
因为不明白
spring
会在何时将实现类的对象注入到你的属性中,对本例来说,
spring
会在何时调用
setCal
方法!这个问题的答案可以在
spring-test
的源代码中找到,下面让我们进入
spring-test
的源代码之旅吧
….:)
首先我们看看
spring-test
包的继承体系
:
1.
org.springframework.test.ConditionalTestCase.java :
该类继承了
junit
的
TestCase,
此类有一个有用的方法
isDisabledInThisEnvironment
,在你的测试类中可以覆盖它,如果你不想执行某个测试方法,就返回
true,
在一个测试方法运行前,该方法会被自动调用,以决定当前测试方法是否要执行,这样你就可以只关注你想关注的方法
:
2.
org.springframework.test.AbstractSpringContextTests.java:
该类最重要的一点在于它包含有一个静态属性
:
此属性保存了
spring
applicationContext
实例,意味着不同的测试类可以共享一个
applicationContext,
而不必在每个测试类执行时都去重新实例化
spring
容器
3.
org.springframework.test.AbstractSingleSpringContextTests.java:
该类覆盖了
TestCase
类的
setUp
方法
,
并且不允许测试类再覆盖,因为该方法包含重要操作
—-
初始化
spring
容器
,
并且为
spring
的自动注入留下了伏笔
—prepareTestInstance
方法
!
作为替代
,spring
为测试类留了一个初始化入口
—onSetUp
方法,测试类可以覆盖该方法,为每个测试方法执行自定义初始化操作
:
对于
tearDown
方法,也是一样的,不允许测试类再覆盖
,
但可以覆盖
onTearDown
方法,可以执行自定义的销毁操作
同时,此类承担了初始化
spring
容器的重要任务,测试类可以覆盖
getConfigLocations
方法为容器的初始化提供配置文件,如:
4.
org.springframework.test.AbstractDependencyInjectionSpringContextTests.java:
该类覆盖了AbstractSingleSpringContextTests
类中的prepareTestInstance
方法,
该方法在setUp
方法中被调用,
从而实现了自动注入操作,
使得测试类中的属性能够被自动注入,而无需调用getBean
方法手动装配.
该方法首先判断容器是否初始化,
如果已经初始化,
就进入注入操作:
更详细的注入操作,
大家可以跟进injectDependencies()
方法,
里面有详细操作流程.
至此我们知道了spring
是如何为测试类注入实现类对象的,本文只是想为初学者作一点提示,扫清他们的学习障碍.
不当之处还请兄弟姐妹们赐教!:)
VN:F [1.9.6_1107]
转载务必注明出处Taobao QA Team
分享到:
相关推荐
junit针对spring mvc三层测试,通过测试运行,可直接下载运行!
SSM中进行单元测试Junit4+spring-test所需jar包,
分别是两个版本的, 因为spring做单元测试的时候, 是很容易出现版本不兼容的情况, 所以我将我用到的jar包分享出来,zip包中内容:hamcrest-core-1.3、junit4.4、junit-4.12、spring_test2.5.5、spring-test-3.2.0....
分别是两个版本的, 因为spring做单元测试的时候, 是很容易出现版本不兼容的情况, 所以我将我用到的jar包分享出来,zip包中内容:spring_test2.5.5、spring-test-3.2.0.RELEASE 这个我忘了上传有关于junit的jar ,...
struts-junit spring-mock spring-test junit等的javadoc.jar格式的API文档,直接导入Eclipse/MyEclipse/Netbeans等IDE即可实现快速API查询。 包含以下文件: File name -------------------------------------- ...
spring-Test,Junit4 jar,和测试代码
junit test
单元测试案例junit +spring mvc +springboot
Spring Test 整合 JUnit 4 使用总结.rar
NULL 博文链接:https://uuider.iteye.com/blog/2110603
JspTest是一个不依赖予容器,对jsp页面进行单元测试的junit扩展。内部它使用Jasper作为jsp编译引擎---tomcat的jsp引擎。对于使用maven作为构建工具的团队或个人,使用非常简单,添加下面的依赖到你的pom文件 ...
junit eclipse testcast Testsuite 源码 和文档
Junit是java中测试的必备工具,Junit_test这个程序是更好的实现对Junit的了解。帮助大家学习
Junit4 Test 单元测试 Junit4 Test 单元测试 Junit4 Test 单元测试
本篇文章主要介绍了Junit 测试之 Spring Test,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
spring添加 单元测试 junit4 +spring jar包: hamcrest-core-1.3.jar junit-4.12.jar spring-test-4.2.5.RELEASE.jar
spring-test-junit5, JUnit ( a )的spring TestContext框架扩展( a ) spring 5测试支持这个项目作为 5的正式 Prototype,在 spring TestContext框架测试支持,并与 SPR-13575结合到 Spring Framework 。 因此,在...
Spring整合Junit测试时所需要的jar包。 spring-test-3.2.3.RELEASE.jar
JUnitTest课件
JUnitTest3 and JUnitTest4