



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2+Spring + hibernate 中对action的单元测试环境搭建 网上都说没有必要对action进行单元测试,但是有的项目中没有为了代码结构刻意去弄一个service层出来调用dao,而是在action中直接操作Dao层的函数,就我做的这个项目,搭建了一个对antion的单元测试。仅作为备忘。1.途中碰到的问题。 如何来测试action?网上给出的很多参考使用MockStrutsTestCase,而且还是对应struts1.x的。在apache上查看struts2的文档时候发现,有提供一个包struts2-junit-plugin-2.1.8.jar,里面有测试struts2.x中action的类StrutsSpringTestCase,可以用来测试ssh中的action。 如何来解决JPA中的lazy机制?大家知道,ssh集成后,hibernate的lazy机制成为让人头疼的问题,网上普遍有两种解决方案,在web.xml中使用spring提供的 OpenSessionInViewFilter来实现,还有一种是在application.xml中配置OpenSessionInViewFilter来实现。前者通用,后者只能用在springmvc结构中。 这里不再详细描述,详见网友blog(/zxq1406spys/archive/2009/10/30/4748283.aspx) 如何来做用户session管理?比如测试跟登陆用户身份信息相关的action。在StrutsSpringTestCase中有request属性,所以我们可以mock出session来代替网页请求的真实session。 2.上述问题解决以后,我们的单元测试环境就可以开始搭建了。 环境描述:Struts2 +Spring2.5 + hibernate3+ junit4 目的:对后台Action层的函数进行单元测试 需要的Jar包:junit4.jar(eclipse自带的,在项目路径中导入即可。“properties-Add Library-JUnit-JUnit4”) struts2-junit-plugin-2.1.8.jar 下面是基础代码代码 public class MessageActionTest extends StrutsSpringTestCase /*这个函数相当Before注解的函数,是调用单元测试后的时候, 首先会执行的方法。可以在这里面做一些必要的准备工作*/ Override protected void setUp() throws Exception super.setUp(); /*这个是单元测试的方法,一个方法测试一个功能,或者一个action*/ Test public void testGetReceiveMessage() throws Exception /*request是类StrutsSpringTestCase的成员变量, 是MockHttpServletRequest对象,在这里mock出来的一个web中的request*/ request.setParameter(userId, 1); /*我的环境中,返回值是json格式,result将是json格式的一个字符串 输入action的地址*/ String result = executeAction(/modules/train/messageAction!getReceiveMessage.action); /TODO:接下去可以对返回值做分析判断 解决问题jpa中lazy加载的问题,首先在setUp()函数中加入下述代码代码 SessionFactory sessionFactory = lookupSessionFactory(request); Session hibernateSession= getSession(sessionFactory); TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(hibernateSession);然后再类中加入下面两个私有函数代码 private Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException Session session = SessionFactoryUtils.getSession(sessionFactory, true); FlushMode flushMode = FlushMode.NEVER; if (flushMode != null) session.setFlushMode(flushMode); return session; private SessionFactory lookupSessionFactory(HttpServletRequest request) /“sessionFactory”是你spring配置文件(通常是application.xml)中的SessionFactory。 /如:org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean return (SessionFactory)this.applicationContext.getBean(sessionFactory);这样关于lazy加载的问题解决。其实这个时限还是参考了Spring中OpenSessionInViewFilter的。 首先,通过lookupSessionFactory()函数来获取这个测试环境中的org.hibernate.SessionFactory实体对象,其中的applicationContext是org.springframework.context.ApplicationContext的实现org.springframework.context.support.GenericApplicationContext,我们可以通过它的getBean方法来获取你配置文件中配置的SessionFactory。使用注解是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean,不需要使用注解的时候可以用org.springframework.orm.hibernate.LocalSessionFactoryBean来实现。 然后,在通过getSession()来获取其中的一个session,获取session的过程类似于java jdk 1.4以后的ThreadLocal类的实现方法,为每一个线程(用户的每一个request请求)提供一个“私有的”session实体类。关于ThreadLocal是干什么的,这里就不多讲了。所以我们在获取Session的时候,将这个session的FlushMode设置为FlushMode.NEVER,这样就可以让Spring来管理这个session,使得hibernate查询结束后,不会关闭session,从而解决lazy加载的问题。 最后,调用Spring提供的TransactionSynchronizationManager.bindResource()方法将session绑定到该请求的resources中,值得一提的是,其中的resources也是通过ThreadLocal来实现跟线程绑定的。关于实现web session的问题,很简单,该类提供了一个MockHttpServletRequest成员变量,我们只要mock一个session出来,然后加入到这个request中,就可以实现session的模拟了。示例代码如下:代码 HttpSession session = new MockHttpSession();String sessionId = UUID.randomUUID().toString();session.setAttribute(ConstParameter.USER_SESSION, sessionId);/user是一个用户信息的类,你可以根据你的需要自己定义UserInfor user = new UserInfo();user.setUserId(1);user.setName(xxx);session.setAttribute(ConstParameter.USER_INFO, user);request.setSession(session);这样,我们的单元测试功能就可以用了。注:在文中,需要加载spring配置文件信息,默认加载的路径是你项目的src目录下,文件名默认为“application.xml”,如果你的spring配置文件放在其它的目录下,或者文件的名字跟默认的不相符,那么你
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教部编版道德与法治八年级上册:9.1 认识总体国家安全观 教学设计
- 初中英语Unit 5 Do you have a soccer ball综合与测试教案及反思
- 2024唐山人才发展集团为中国移动合作商妙音科技有限公司发布招聘笔试参考题库附带答案详解
- 云南省德宏州梁河县高中地理 第四单元 人类活动的地域联系 4.2 农业与区域可持续发展教学设计 鲁教版必修2
- 人教部编版 (五四制)二年级下册课文 516 雷雨教案
- 六年级下册北京的春节教案
- 二年级上册科学教学设计-13.我们的衣服 青岛版(六年制)
- 七年级数学上册 第3章 一次方程与方程组3.1 一元一次方程及其解法第3课时 用去括号解一元一次方程教学设计 (新版)沪科版
- 妇联主席培训述学
- 九年级历史下册 第11课 战争的扩大和转折教学设计 川教版
- 2025年第六届美丽中国全国国家版图知识竞赛测试题库及答案
- 2025年project使用培训标准课件
- 文献检索与科技论文写作考核大纲
- 租车牌协议书范本
- 湖北浅圆仓滑模施工方案
- 第二章第二节氯气及其化合物-氯气制备及性质微型化实验改进设计 教学设计 2024-2025学年高一上学期化学人教版(2019)必修第一册
- 服装厂新员工培训
- 高中语文部编版教材单元写作任务(必修上下册+选择性必修上中下册)
- 高考英语总复习《阅读七选五》专项测试卷含参考答案
- 2025年福建省龙岩市武平县乡村振兴战略储备人才引进18人历年高频重点提升(共500题)附带答案详解
- 人教版(2025新版)七年级下册数学第七章 相交线与平行线 单元测试卷(含答案)
评论
0/150
提交评论