Struts+Spring+Hibernate架构下的单元测试
2007-11-30 17:16
288 查看
[align=left]经过一周的摸索与学习,终于把Spring+Hibernate+Struts架构在MyEclipse的环境下搭建起来了,实际大部分时间都在用JUnit进行单元测试,真不容易呀。下面对我一周的学习情况进行一下总结,希望对想大家有所帮助。[/align]
[align=left] [/align]
[align=left]JUnit基础部分很好学,只要用模板复制就可以了。就不多说了,网上资料多的是。[/align]
[align=left] [/align]
[align=left]先说一下测试spring,因为Hibernate是在Spring封装的所以不用单独测试。[/align]
[align=left]首先让测试类继承org.springframework.test.AbstractTransactionalSpringContextTests,如[/align]
[align=left]Public class TestAccoutDAOImp extends AbstractTransactionalSpringContextTests{}[/align]
[align=left]先利用getConfigLocations()获得配置文件,但是在MyEclipse中applicationContext.xml等配置文件必须放在src下,放到WEB-INF下编译时提示找不到相关配置文件,真不爽,有谁有好的解决办法发个邮件告诉我一声,非常感谢。liweimilan@163.com[/align]
[align=left]public String[] getConfigLocations(){
String[] config = new String[]{"applicationContext.xml","applicationContext-hibernate.xml","applicationContext-service.xml"};
return config;
}[/align]
[align=left]因为所有有关spring的测试都要用到getConfigLocations(),所以可以编写一个父类,让其它的测试类继承它更方便一些,这是Pragmatic Unit Testing (in Java with JUnit)一书中推荐的一种方法,在父类中还可以再加入一些其它子类共有的方法。[/align]
[align=left]下面就是获得applicationContext这个变量了,
AccountDAO accountDAO = (AccountDAOImp)applicationContext.getBean("accountDAO");得到你的实例来进行业务逻辑测试了,它在此时完成以后会把数据库回滚一次,不会影响你的数据库记录,但要记住它是对数据库进行操作的,只是操作后回滚,在查询的时候可以体会到。[/align]
[align=left] [/align]
[align=left]现在说一下Struts 的测试,我的struts有一个基类叫BaseAction,[/align]
[align=left]publicclass BaseAction extends DispatchAction {[/align]
[align=left] /*[/align]
[align=left] * Generated Methods[/align]
[align=left] */[/align]
[align=left] private ServiceFactory service;[/align]
[align=left] publicvoid setServlet(ActionServlet actionServlet) {[/align]
[align=left] super.setServlet(actionServlet);[/align]
[align=left] if (actionServlet != null) {[/align]
[align=left] ServletContext servletContext = actionServlet.getServletContext();[/align]
[align=left] WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);[/align]
[align=left] this.service = (ServiceFactory)wac.getBean("service");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] protected ServiceFactory getService() {[/align]
[align=left] returnservice;[/align]
[align=left] }[/align]
[align=left]}[/align]
由它来获得Spring的配置文件,要记住在web.xml中要进行配置,
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
也可用<listener>,为了这个我郁闷了一天,另外还有MyEclipse中没有导入commons-beanutils-1.7.0.jar的包,要手动导入,否则会出现莫明其妙的错误。
/* 注明以下摘自网络,具体内容可访问http://www.cjsdn.com/post/print?bid=7&id=106937 */
主要问题就是要提供一个ApplicationContext为TestCase调用,这样我们引用了一个JUnitHelper工具类进行相关Spring的操作,如提供ApplicationContext环境,下面我们就实现类测试和Action类测试进行一下讲解,其中数据库连接由spring控制。在MockStrutsTestCase的setup方法中,我们进行绑定操作: JUnitHelper.setWebApplicationContext(getActionServlet().getServletContext()) ; 余下的测试就是标准的strutstestcase的测试方法。
JUnitHelper的源代码如下:
package test.struts.action;
/*
* Copyright (c) 2004 Your Corporation. All Rights Reserved.
*/
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import javax.servlet.ServletContext;
/**
* junit测试的工具类
* Date: 2004-4-20
*
* @author <a href="mailto:linux_china@hotmail.com">chenlibing</a>
*/
public class JUnitHelper
{
/**
* 项目基准路径
*/
public static String BASE_DIRECTORY = "D:/project/src";
/**
* spring基本配置文件相对路径
*/
public static String[] Configuration_Location = new String[]{BASE_DIRECTORY + "/applicationContext.xml"};
private static XmlWebApplicationContext wac = null;
private static FileSystemXmlApplicationContext fsxac = null;
/**
* 设置WebApplicationContext
*
* @param context ServletContext变量
*/
public static void setWebApplicationContext(ServletContext context)
{
if (context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null)
return;
if (wac == null)
{
wac = new XmlWebApplicationContext();
wac.setServletContext(context);
wac.setConfigLocations(Configuration_Location);
wac.refresh();
}
context.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);
}
/**
* 获取文件方式的ApplicationContext
*
* @return ApplicationContext变量
*/
public static ApplicationContext getApplicationContext()
{
if (fsxac == null)
{
fsxac = new FileSystemXmlApplicationContext(Configuration_Location);
}
return fsxac;
}
}
/***********************************************************************/
下面再说一下利用StrutsTestCase测试Struts的Action
首先让测试类继承import servletunit.struts.MockStrutsTestCase
接着是setUp()方法
[align=left]publicvoid setUp() throws Exception {[/align]
[align=left] super.setUp();[/align]
[align=left] setContextDirectory(new File("WebRoot")); [/align]
[align=left] JUnitHelper.setWebApplicationContext(getActionServlet().getServletContext());[/align]
[align=left] setInitParameter("validating","false");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]setContextDirectory(new File("WebRoot")),这个是在WebRoot下寻找struts-config.xml文件用的,在MyEclipse中很方便,网上说把WEB-INF copy到src下,但这个太麻烦了,而且很不容易和开发同步。注意此时的Struts-config.xml放在WEB-INF下,要放在其它地方,还得修改,具体就上网上找吧。[/align]
[align=left]JUnitHelper.setWebApplicationContext(getActionServlet().getServletContext()) 就是上面说的获得Spring的ApplicationContext。[/align]
[align=left]还有一点我的Action是用的是DispatchAction,测试中要加上[/align]
[align=left]addRequestParameter("method","logon")之类的东西[/align]
[align=left]之后的struts测试内容上网上找就可以了,有的是,关于StrutsTestCase的文章,http://www.360doc.com/showRelevantArt.aspx?ArticleID=134063 中有不少好文章可以参考。[/align]
[align=left]文章写得有些简单,内容有些少,只希望对大家有帮助,互相学习。[/align]
相关文章推荐
- 用spring、Hibernate、Struts组建轻量级架构
- 使用JUnit在struts+spring+hibernate框架环境下进行单元测试
- HSSA总体架构(HSSA=Hibernate+Spring+Struts+Ajax)
- struts+spring+hibernate的web应用 架构搭建
- 用spring、Hibernate、Struts组建轻量级架构
- Struts+Spring+Hibernate 的架构整合
- struts+spring+hibernate的web应用<一> 架构搭建
- 在Myeclipse里使用Junit贴图教程与使用JUnit在struts+spring+hibernate框架环境下进行单元测试
- 用spring、Hibernate、Struts组建轻量级架构
- Hibernate/Spring/Struts架构使用OpenSessionInView的问题
- spring-ibatis-Struts-Hibernate 架构图
- 第一篇:SSH(Struts+Spring+Hibernate)架构
- (转)struts+spring+hibernate的web应用(一)架构搭建
- Spring+Struts2+Hibernate 架构分层原理说明
- 一种优雅的流行架构:Struts+Spring+Hibernate
- 常见Struts、Hibernate、Spring、J2EE、ibatis、Oracle等开发框架架构图及其简介
- 关于spring+hibernate+struts架构service层的作用
- 关于spring+hibernate+struts架构service层的作用
- Struts、Hibernate和Spring的轻型J2EE架构的研究
- spring、Hibernate、Struts组建轻量级架构