转载自:http://blog.csdn.net/radic_feng/article/details/6740438

我们期望能像在产品代码中一样,在测试用例中使用的bean也由Spring Context来管理,这样既可以充分利用Spring IOC的优势,同时又使得测试代码更像产品代码,有更好的测试效果。那么怎么能在运行测试用例时自动启动Spring Contex,从而向测试用例中注入beant呢?本文提供使用JUnitTestNG两个测试框架启动Spring
Context的步骤。

JUnit框架

JUnit对Spring有天然的支持,只需添加两条Annotation就可以启动Spring Context了,示例代码如下:

[java] view
plain
copy

  1. @ContextConfiguration("/META-INF/spring/integration/inbound-gateway-config.xml")
  2. @RunWith(SpringJUnit4ClassRunner.class)
  3. public class InboundGatewayTests {
  4. @Autowired
  5. private SimpleWebServiceInboundGateway gateway;
  6. }

仅仅添加@ContextConfiguration,指定Spring Context配置文件的位置以及@RunWith,即可使用指定配置文件中定义的bean。

TestNG框架

如果你的Eclipse还没有安装TestNG插件,请参考安装文档

与JUnit不同,TestNG没有提供@RunWith注解。TestNG的测试用例需要继承org.springframework.test.context.testng.AbstractTestNGSpringContextTests或org.springframework.test.context.testng.AbstractTestNGSpringContextTests来启动SpringContext,示例代码如下:

[java] view
plain
copy

  1. @ContextConfiguration(locations={"/WEB-INF/accountContext.xml"})
  2. public class TestDao extends AbstractTestNGSpringContextTests {
  3. @Autowired
  4. JdbcTemplate jdbcTemplate;
  5. @Test
  6. public void init() throws ServletException {
  7. try {
  8. jdbcTemplate.execute("create table contacts (name varchar(45),email varchar(45),phone varchar(45))");
  9. List list = jdbcTemplate.queryForList("select * from contacts");
  10. } catch (Exception e) {
  11. e.printStackTrace(System.out);
  12. }
  13. }
  14. }

以下讲解有关@ContextConfiguration参数的设置:

1. 不指定Context文件,@ContextConfiguration

Spring的ContextLoader会判断是否需要加载context,如果需要,默认加载器(GenericXmlContextLoader )会根据用例类名生成一个Spring Context配置文件的名字,例如,如果测试用例为com.example.MyTest,则GenericXmlContextLoader会从“classpath:/com/example/MyTest-context.xml”中加载Context。

2.指定多个Context文件,比如@ContextConfiguration("/META-INF/spring/integration/inbound-gateway-config.xml")

3.指定多个Context文件,比如@ContextConfiguration(locations={"/applicationContext.xml", "/applicationContext-test.xml"})

ContextLoader会从classpath的根目录加载以上文件。

4. 继承关系对Context文件加载的影响,inheritLocations的使用。

[java] view
plain
copy

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @ContextConfiguration(locations={"/base-context.xml"})
  3. public class BaseTest {
  4. // class body...
  5. }
  6. @ContextConfiguration(locations={"/extended-context.xml"})
  7. public class ExtendedTest extends BaseTest {
  8. // class body...
  9. }

在以上代码中ExtendedTest会加载“/base-context.xml” 和“/extended-context.xml”两个文件,因为inheritLocations的默认值是true。

通过以上解释,我们可以看到Spring Context文件是基于classpath来定位的。在Eclipse下,classpath的设定往往和build环境下不同,怎么将build环境下的Context文件设定到@ContextConfiguration中呢?步骤如下:

  1. 点击Run->Run Configurations...
  2. 选择你要运行的测试用例的运行配置项,比如InContainerTests,然后点击User Entries,然后点击Advanced,在弹出的窗口中选择Add External Folder,点击确定后可以选择任意目录。你可以基于Context文件相对于该目录的位置配置@ContextConfiguration中的参数。


在Eclipse中开发使用Spring IOC的JUnit/TestNG测试用例之详解的更多相关文章

  1. 如何在Eclipse中正确安装Jetty插件并初步使用(图文详解)

    不多说,直接上干货! 最近在做一个Storm项目,需要用到Jetty来进行展示.它类似于Tomcat. 一.eclipse中jetty插件安装 打开eclipse,依次点击菜单Help->Ecl ...

  2. 如何在Eclipse/Myeclipse/Scala IDEA for Eclipse 中正确删除已经下载过的插件(图文详解)

    不多说,直接上干货! 见 Eclipse/Myeclipse/Scala IDEA for Eclipse里两种添加插件的方法(在线和离线) 第一步 :在菜单栏中,找到help-------insta ...

  3. Spring IOC -bean对象的生命周期详解

    生命周期执行的过程如下:1) spring对bean进行实例化,默认bean是单例2) spring对bean进行依赖注入3) 如果bean实现了BeanNameAware接口,spring将bean ...

  4. 老李分享:Eclipse中开发性能测试loadrunner脚本

    老李分享:Eclipse中开发性能测试loadrunner脚本 前篇我分享了如何用loadrunner搭建javauser的性能测试脚本环境,本次我来告诉大家如何在eclipse开发loadrunne ...

  5. 在Eclipse中开发C/C++项目

    摘要:通过本文你将获得如何在Eclipse平台上开发C/C++项目的总体认识.虽然Eclipse主要被用来开发Java项目,但它的框架使得它很容易实现对其他开发语言的支持.在这篇文章里,你将学会如何使 ...

  6. Spring IOC 方式结合TESTGN测试用例,测试简单java的命令模式

    java命令模式: 可以命令("请求")封装成一个对象,一个命令对象通过在特定的接收着上绑定一组动作来封装一个请求.命令对象直接把执行动作和接收者包进对象中,只对外暴露出执行方法的 ...

  7. Spring、SpringMVC、SpringData + JPA 整合详解

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...

  8. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  9. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

随机推荐

  1. Python爬虫入门(3-4):Urllib库的高级用法

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CS ...

  2. CSS布局之圣杯布局和双飞翼布局

    其实圣杯布局和双飞翼布局实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局.它们实现的效果都是一样的,差别在于其实现的思想. 一.圣杯布局 html代码中,将重要的内容 ...

  3. Split the Number(思维)

    You are given an integer x. Your task is to split the number x into exactly n strictly positive inte ...

  4. 欢迎来怼——第四次Scrum会议

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/16 17:15~17:40,总计25min.地点:东北师范 ...

  5. 对懂球帝ios版的用户体验

    用户界面: 主页面是资讯页面 这个设计很棒 对球迷来说 每天最关注的就是 我的主队赢了输了 其次界面以绿色为主 很有绿茵场的感觉 很符合足球狗的口味 记住用户的选择: 这个应用 有一个 球队的关注 选 ...

  6. vsftpd 安全性能工具

    vsftpd实战(服务端192.168.23.12,客户端192.168.23.11) 1:安装vsftpdyum install -y vsftpd 2:客户端安装lftpyum install - ...

  7. C 语言疑难杂症 [转:http://blog.chinaunix.net/uid-20688544-id-1894880.html]

    无聊在网上找了些C语言的东东练一下手,竟然发现其实还有好多细节之前,没注意到,该好好复习一下先. 解决掉的问题先不发出来,把疑问的先做个笔记,过几天解决了就回来修改补上.   #include < ...

  8. 【C++】为多态基类声明virtual析构函数

    来自<Effective C++>条款07:为多态声明virtual析构函数 当derived class对象经由一个base class指针被删除,而该base class带着一个non ...

  9. 【Python】极简单的方式序列化sqlalchemy结果集为JSON

    继承 json.JSONEncoder 实现一个针对sqlalchemy返回类型的处理方式. sqlalchemy的返回类型有大都有两种,一种是Model对象,一种是Query集合(只查询部分字段). ...

  10. BZOJ 1565 植物大战僵尸(拓扑排序+最大权闭合子图)

    图中的保护关系就类似于最大权闭合子图.即你想杀x,你就一定要杀掉保护x的点,那么把x向保护它的点连边.那么题目就转化成了最大权闭合子图的问题. 但是这个图有点特殊啊... 考虑有环的情况,显然这个环以 ...