`
zhangjunji111
  • 浏览: 47988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个Struts2结合Spring测试的方法

阅读更多

  最近在学习Struts2,进行测试驱动开发,对于struts2与Spring集成的测试,Struts2给出了一个插件struts2-junit-plugin-2.1.8.1.jar,这个插件需要spring-test.jar包的支持,所有需要测试的Action类都继承StrutsSpringTestCase。这个测试要求只能用个application.xml文件,而且必须放到类路径根目录下面。在我们开发中往往编写许多以application开头的部署文件,一般也不在类路径下面存放,例如我一般习惯在WEB-INF目录下建立一个config文件夹,将spring的部署文件都放到config文件夹下面。但是用StrutsSpringTestCase类不能解决改问题,我查看了一下StrutsSpringTestCase的原代码,代码如下:

public abstract class StrutsSpringTestCase extends StrutsTestCase {
    private static final String DEFAULT_CONTEXT_LOCATION = "classpath*:applicationContext.xml";
    protected static ApplicationContext applicationContext;


    protected void setupBeforeInitDispatcher() throws Exception {
        //init context
        GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
        applicationContext = xmlContextLoader.loadContext(getContextLocations());
        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
    }

    protected String getContextLocations() {
        return DEFAULT_CONTEXT_LOCATION;
    }
}

     我们只要写一个继承类,重载setupBeforeInitDispatcher()方法就可以解决改问题了,如果我们有两个配置文件applicationContext.xml、applicationContext-other.xml,我们就可以这样写:

   @Override
    protected void setupBeforeInitDispatcher() throws Exception {
        GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
        applicationContext = xmlContextLoader.loadContext(new String[]{"applicationContext.xml,","applicationContext-other.xml,"});
        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
    }

       这样我们就解决了多个配置文件的问题,但是还有一个,我们一开始也不能确定有几个配置文件,这个方法还是不通用,需要再次重构,这样,我决定写一个方法,从config文件下读取文件,所有以application开通的文件组成一个字符串数组,这样就不需要修改改类了。代码如下:

public class SpringBeanFactoryMock extends StrutsSpringTestCase {
	@Override
	public void setUp() throws Exception {
		super.setUp();
	}
	@Override
    protected void setupBeforeInitDispatcher() throws Exception {
        GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
        applicationContext = xmlContextLoader.loadContext(getContextLocation());
        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
    }
	public String[] getContextLocation(){
		URL classUrl = SpringBeanFactoryMock.class.getResource("");
		String path = classUrl.getPath();
		try {
			path = URLDecoder.decode(path, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		path =  path.substring(1 , path.indexOf("WEB-INF"))+ "WEB-INF/";
		File configPath = new File(path);
		String[] applicationContexts = configPath.list(new FilenameFilter(){
			public boolean accept(File dir, String name){
				if(name.toLowerCase().startsWith("applicationcontext")){
					return true;
				}
				return false;
			}				
		});			
		for(int i=0;i<applicationContexts.length;i++){
			applicationContexts[i] = "file:"+path +  applicationContexts[i];
		}
		return applicationContexts;
	}
}

 

    以后我们测试Struts2的Action类时候,只要继承SpringBeanFactoryMock类就可以了。

分享到:
评论
3 楼 mmBlue 2010-05-08  
搜索资料时查到此贴了,不知这个插件对注解的service属性有用没,目前项目中采用的EasyMock测试的。
2 楼 mangoo1 2010-02-23  
不应该把 原来的 setUp 方法 override,只需要重载 StrutsSpringTestCase 里面的 getContextLocations 就可以了。
1 楼 wxlmcqueen 2010-01-19  
试试,如果真能行,那真谢谢啦。

相关推荐

    struts2-spring-plugin-2.2.1.jar

    4. **AOP集成**:结合Spring的AOP能力,可以为Struts2的Action提供切面增强,如性能监控、日志记录等。 5. **简化配置**:通过插件,开发者不再需要在struts.xml或web.xml中显式配置Action的类名和实例,只需在...

    struts2+spring+mybatis+easyui的实现

    总的来说,"struts2+spring+mybatis+easyui"的实现是一个标准的Java Web项目结构,它利用Maven进行构建管理,通过整合四个组件,实现了后端的业务逻辑处理、数据访问和前端的用户界面展示。这种架构在实际开发中具有...

    struts2+spring练习

    Struts2提供了MVC(模型-视图-控制器)架构,帮助开发者更好地组织和管理应用程序逻辑,而Spring则是一个全面的后端框架,提供依赖注入、AOP(面向切面编程)、事务管理等特性。 在"Struts2+Spring练习"项目中,...

    struts2+spring4+hibernate

    首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了强大的请求处理和页面展示功能。Struts2通过Action类和配置文件控制应用程序的行为,使得业务逻辑与视图层分离,提高了代码的...

    struts2+spring+springstruts2+spring+springstruts2+spring+spring

    尽管标题和描述中的重复信息可能是一个错误,但我们可以深入探讨Struts2、Spring以及Spring与Struts2结合使用时的关键知识点。 ### Struts2框架 Struts2是Apache软件基金会维护的一个开源框架,用于构建企业级Java...

    搭建SSH框架需要引入的Struts2包(log4j,spring-web,struts2-spring-plugin)

    在构建SSH框架时,每个框架都扮演着不同的角色,以提供一个高效、可扩展的后端架构。现在我们来详细了解一下搭建SSH框架过程中,这三个关键组件以及所提及的包的作用。 首先,Struts2作为MVC(模型-视图-控制器)...

    struts2-spring-plugin-2.0.11.1.jar

    Struts2-Spring-Plugin-2.0.11.1.jar 是一个专门为Apache Struts2框架设计的插件,其主要目的是实现Struts2与Spring框架的集成。这个插件使得开发者能够在Struts2应用中无缝地使用Spring进行依赖注入(Dependency ...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于维护的后端架构。 首先,让我们详细了解一下每个组件: 1. **Struts2**:这是一个MVC(Model-View-Controller)框架,负责处理用户请求并将其映射到相应...

    Struts2+Spring3+MyBatis结合项目

    这个“Struts2+Spring3+MyBatis结合项目”是一个实战示例,旨在帮助开发者深入理解和实践这三大框架的集成与应用。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Web应用框架。它主要负责...

    struts2+spring+Ibatis框架包

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们共同构建了一个灵活、可扩展且高效的应用程序开发环境。这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于...

    struts2整合spring实现拦截器

    Struts2 和 Spring 的整合是Java Web开发中的常见实践,这两种框架的结合可以极大地提高应用的可维护性和灵活性。在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先...

    struts2和Spring整合需要的jar包

    Struts2是一个MVC(Model-View-Controller)框架,主要用于控制应用程序的流程,而Spring则是一个全面的后端解决方案,包括依赖注入、AOP(面向切面编程)、事务管理等。将这两个框架整合在一起,可以充分利用它们...

    struts2+spring2+ibatis

    标题"struts2+spring2+ibatis"表明这是一个关于如何整合这三个框架的实例教程。这个例子可能是为了演示如何在实际项目中将它们结合起来,以实现更高效的开发流程。 描述中提到"struts2整合sprint+ibatis 框架的简单...

    struts2结合spring的jar包.rar

    在"struts2结合spring的jar包.rar"中,我们看到的是一些关键库文件,这些文件是整合Struts2和Spring所必需的: 1. **struts2-core-2.5.26.jar**:这是Struts2的核心库,包含了Struts2框架的基础组件,如Action、...

    struts2,spring

    在实际项目中,`teststruts` 文件可能包含了一个简单的示例应用,演示了如何在Struts2和Spring集成环境中配置和运行一个基本的Web应用。通常,这会涉及到以下步骤: 1. **配置Spring**:创建Spring的配置文件,定义...

    struts2+spring3+ibatis项目整合案例

    Struts2与Spring3的整合,使得我们可以利用Spring来管理Struts2的Action,从而实现依赖注入,提高代码的可测试性和可维护性。 Spring3则是企业级应用的全面解决方案,包括IoC(Inversion of Control,控制反转)和...

    quartz.*整合struts2、spring一个的demo

    这个"quartz.*整合struts2、spring一个的demo"示例旨在演示如何将这三个组件集成到一起,实现一个完整的任务调度系统。 首先,我们来看Quartz的集成。Quartz的核心概念包括Job(工作)、Trigger(触发器)和...

    struts2整合Spring和hibernate案例

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的...这个案例提供了一个实用的起点,帮助开发者理解如何在实际项目中将Struts2、Spring和Hibernate结合,以实现高效的Java Web应用开发。

    Hibernate与Struts2和Spring组合开发实例

    在【压缩包子文件的文件名称列表】中,“v512工作室_刘伟_Hibernate与Struts2和Spring组合开发.pdf”很可能是一份详尽的教程或指南,涵盖了如何在实际项目中结合这三个框架的步骤和最佳实践。 详细知识点可能包括:...

    [轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发

    【轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发】这个主题主要涉及的是Java EE领域中的三大框架——Struts2、Spring3和Hibernate的集成应用,这是构建现代Java后端系统的一种常见方式。这些框架...

Global site tag (gtag.js) - Google Analytics