转载自: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. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  2. 1019psp

    1.本周psp: 2.本周进度条: 3.累计进度图(折线图): 4.psp饼状图:

  3. iOS- Swift和Object-C的混合编程

    1.前言   事实证明,在短时间内Swift还取代不了Object-C, 而且.... Apple Swift 开发小组的人说的:「We'll recommend people start with ...

  4. 使用字符界面 qemu-kvm 创建虚拟机

    qemu-kvm的基本用法:指定系统类型,CPU运行模式,NUMA(Non Uniform Memory Access Architecture), 软驱设备,光驱设备,硬件设备   # 查看qemu ...

  5. Markdown语法实践

    Markdown语法实践 Markdown基本语法 1.标题 # 一级标题 ## 二级标题 ### 三级标题 eg: 一级标题 二级标题 三级标题 2.链接 标准: [Title](URL) 实例: ...

  6. Markdown github 风格语法

    某些效果cnblog无法支持,见 https://github.com/tanghammer/note/blob/master/Markdown%20github%E9%A3%8E%E6%A0%BC% ...

  7. #Leetcode# 922. Sort Array By Parity II

    https://leetcode.com/problems/sort-array-by-parity-ii/ Given an array A of non-negative integers, ha ...

  8. php判断是否https

    function is_https() { if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'o ...

  9. java 两个数组合并

    需求:两个字符串合并(如果想去重复,参考下一篇--数组去重复及记录重复个数) //方法一 Arrays类 String[] a = {"A","B"," ...

  10. 第110天:Ajax原生js封装函数

    一.Ajax的实现主要分为四部分: 1.创建Ajax对象 // 创建ajax对象 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHtt ...