- 浏览: 515059 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
jxq0816:
请问博主task:executortask:scheduler ...
Spring任务调度器之Task的使用 -
eithree:
thanks you so much! This proble ...
解决ECShop transport.js与jQuery冲突 -
周聪龙:
按照你的配置,点击登录按钮没反应呀,所有的Ip都改为自己的了呀 ...
自定义客户端登录CAS服务器-iframe实现 -
周聪龙:
denglihong 写道shangliuyan 写道我点击提 ...
自定义客户端登录CAS服务器-iframe实现 -
nihaonihao1987:
...
Spring任务调度器之Task的使用
过往使用的方式从最原始的IDE的DEBUG工具断点查错到目前还在用最快捷的使用文字输出(log或system.out)。
这些调试方式不是说不好,但有些情况下达不到自己的需求,浪费了一些时间,因为在SSH的环境下修改的源码就意味着要部署。
有个误区,有的人认为把ApplicationServer的热部署方式设置为ture,就不用部署了。其实实际还是重新部署了一遍,只是不需要你按键罢了。
而且这样的后果还是你每保存一下就帮你部署一次,项目大的话花费很更多,我想也有不少人知道有个内存溢出的问题...挺头痛的..
之前偶尔接触到JUnit,才领略到单元测试的精辟,记录一下学习心得。请别笑学得晚,最近也有个TestNG,有时间也继续研究下。学习调试程序也是一门学问啊。
好啦,言归正传并且长话短说。
使用JUnit进行单元测试方法,初步介绍。
导入JUnit的包就不多说了,一般的IDE都集成的了。
首先建议大家如果想使用Main静态方法来进行调试的话,请直接使用JUnit吧。使用方法很简单,如下:
其实这个是生命周期的标记,@Before为执行@Test方法之前先执行的,而@After就是执行完@Test之后执行,比较好理解。如果想不执行的话直接把标记注释掉即可,快捷简单。
执行添加了@Test的方法也简单,由于我是使用MyEclipse的关系,这里以它来举例。其实跟执行Main方法差不多在运行里面选择JUnit调试的选项。快捷键:Alt+Shift+X,T,但我更喜欢在代码上面右键然后选择运行JUnit测试。
在传统的三层架构中进行单元测试
DAO层和业务逻辑层的调试
首先在@Before标记上执行获取需要调试的单元所使用的bean。
具体例子如:
获取BeanFactory的方法有多种,这里比较推荐使用这种方法。注意这里的applicationContext.xml是放在classPath之下,也推荐放在这里,比较好调试。
view层的调试
在我的应用中,view层使用的是struts1.29的技术,其实际上也没用到什么,仅仅作为servlet来使用罢了。而且struts的标记库也实在太啰嗦了,所以我前端使用的技术是AJAX+JSON+Struts.
JavaScript就不用多说了,必定需要的了,而这里不推荐使用DWR框架,当然如果对JavaScript不熟的话也没办法了。总之还是王道的那句:使用什么技术还是取决与实际项目情况。
说这些的原因是告诉大家,struts所用到的from、forward之类的我都没调试了,后续描述一下。
首先想调试struts,使用到的技术是StrutsTestCase。具体地址http://sourceforge.net/projects/strutstestcase/
需要记住的是,StrutsTestCase是Junit TestCase类的扩展。
使用方法,例子如下:
首先把单元测试类继承servletunit.struts.MockStrutsTestCase
然后模拟容器,具体请查看以下
注意setContextDirectory方法,默认情况下setUp()方法会在classPath下找web.xml和struts-config.xml等配置文件,所以可能会遇到找不到的情况。
使用setContextDirectory并且设置File为"WebRoot"的话,告诉程序在WebRoot下找配置文件,在SSH通常情况下都适用。
准备功夫做好了就可以尽情的进行测试了,并不用担心修改代码后需要重新部署项目了。
这里注意的时,在继承了MockStrutsTestCase的子类当中,所有以test开头的方法都自动执行调试程序,不再需要@Test标记。这里有保留意见,双利刃吧,还是喜欢用标记进行测试。
例子如下:
当然JUnit没这么简单,但我使用到的这些足够了,其他的还可以使用断言(assert)来辅助大家调试。给大家举一些例子,当中都为网上整理出来。
主要函数和作用
setRequestPathInfo,设置request的请求
addRequestParameter,将参数和对应的值加入request中
actionPerform,执行这个请求
verifyForward,验证forward的名字是否正确
verifyForwardPath,验证forward的path是否正确
verifyNoActionErrors,验证在action执行过程中没有ActionError产生
verifyActionErrors,验证在action执行过程中产生的ActionError集合的内容
如果你action里面有setAttribute之类的方法,也想验证的话。
也可以通过getSession()方法来获取session(request类似)。
跟着再使用getAttribute进行assert就可以组合成自己需要的调试单元了。顺便列举一下assert方法。
assertEquals(), assertNull(), assertSame(), assertTrue(),assertArrayEquals()等..
无论如何,如果你不喜欢使用assert方法,直接输出一下也十分便捷。
希望对大家学习有帮助。
嗯,谢谢提醒。所以有待提高测试阶段的方法
JUtil or JUnit?
恍然大悟...
这些调试方式不是说不好,但有些情况下达不到自己的需求,浪费了一些时间,因为在SSH的环境下修改的源码就意味着要部署。
有个误区,有的人认为把ApplicationServer的热部署方式设置为ture,就不用部署了。其实实际还是重新部署了一遍,只是不需要你按键罢了。
而且这样的后果还是你每保存一下就帮你部署一次,项目大的话花费很更多,我想也有不少人知道有个内存溢出的问题...挺头痛的..
之前偶尔接触到JUnit,才领略到单元测试的精辟,记录一下学习心得。请别笑学得晚,最近也有个TestNG,有时间也继续研究下。学习调试程序也是一门学问啊。
好啦,言归正传并且长话短说。
使用JUnit进行单元测试方法,初步介绍。
导入JUnit的包就不多说了,一般的IDE都集成的了。
首先建议大家如果想使用Main静态方法来进行调试的话,请直接使用JUnit吧。使用方法很简单,如下:
@Test public void test1() { System.out.println("Hello World!"); }
其实这个是生命周期的标记,@Before为执行@Test方法之前先执行的,而@After就是执行完@Test之后执行,比较好理解。如果想不执行的话直接把标记注释掉即可,快捷简单。
执行添加了@Test的方法也简单,由于我是使用MyEclipse的关系,这里以它来举例。其实跟执行Main方法差不多在运行里面选择JUnit调试的选项。快捷键:Alt+Shift+X,T,但我更喜欢在代码上面右键然后选择运行JUnit测试。
在传统的三层架构中进行单元测试
DAO层和业务逻辑层的调试
首先在@Before标记上执行获取需要调试的单元所使用的bean。
具体例子如:
private IMailboxDAO MailboxDAOImpl; @Before public void init() { ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml" }); BeanFactory factory = (BeanFactory) context; MailboxDAOImpl = (IMailboxDAO) factory.getBean("mailboxDAOImpl"); } @Test publiv void testSave(){ Bean transientInstance = new Bean(); ... MailboxDAOImpl.save(transientInstance); }
获取BeanFactory的方法有多种,这里比较推荐使用这种方法。注意这里的applicationContext.xml是放在classPath之下,也推荐放在这里,比较好调试。
view层的调试
在我的应用中,view层使用的是struts1.29的技术,其实际上也没用到什么,仅仅作为servlet来使用罢了。而且struts的标记库也实在太啰嗦了,所以我前端使用的技术是AJAX+JSON+Struts.
JavaScript就不用多说了,必定需要的了,而这里不推荐使用DWR框架,当然如果对JavaScript不熟的话也没办法了。总之还是王道的那句:使用什么技术还是取决与实际项目情况。
说这些的原因是告诉大家,struts所用到的from、forward之类的我都没调试了,后续描述一下。
首先想调试struts,使用到的技术是StrutsTestCase。具体地址http://sourceforge.net/projects/strutstestcase/
需要记住的是,StrutsTestCase是Junit TestCase类的扩展。
使用方法,例子如下:
首先把单元测试类继承servletunit.struts.MockStrutsTestCase
然后模拟容器,具体请查看以下
/** * 加载模拟容器 * @throws java.lang.Exception */ @Before public void setUp() throws Exception { super.setUp(); File context = new File("WebRoot"); setContextDirectory(context); }
注意setContextDirectory方法,默认情况下setUp()方法会在classPath下找web.xml和struts-config.xml等配置文件,所以可能会遇到找不到的情况。
使用setContextDirectory并且设置File为"WebRoot"的话,告诉程序在WebRoot下找配置文件,在SSH通常情况下都适用。
准备功夫做好了就可以尽情的进行测试了,并不用担心修改代码后需要重新部署项目了。
这里注意的时,在继承了MockStrutsTestCase的子类当中,所有以test开头的方法都自动执行调试程序,不再需要@Test标记。这里有保留意见,双利刃吧,还是喜欢用标记进行测试。
例子如下:
public void testToPageGoMembershipByDl() { String actionUri = "/distributionList/bin/get_members"; String parameterKey1 = "toPage"; String parameterKey2 = "dlId"; String toPageGoStr = "1"; String dlId = "402881b6200d287101200d69838f0009"; Map<String, Object> urlMap = new HashMap<String, Object>(); urlMap.put(parameterKey1, toPageGoStr); urlMap.put(parameterKey2, dlId); generateRequestParameters(urlMap); setRequestPathInfo(actionUri);//设置request的请求 actionPerform();//执行请求 } //公共方法,封装url的parameters请求 public void generateRequestParameters(Map<String, Object> parameters) { if ((parameters != null) && (!parameters.isEmpty())) { for (Map.Entry<String, Object> entry : parameters.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); String[] parameterValues = null; if (value instanceof String) { parameterValues = new String[] { (String) value }; } else if (value instanceof String[]) { parameterValues = (String[]) value; } if (parameterValues != null) addRequestParameter(key, parameterValues);//增加request参数 } } }
当然JUnit没这么简单,但我使用到的这些足够了,其他的还可以使用断言(assert)来辅助大家调试。给大家举一些例子,当中都为网上整理出来。
主要函数和作用
setRequestPathInfo,设置request的请求
addRequestParameter,将参数和对应的值加入request中
actionPerform,执行这个请求
verifyForward,验证forward的名字是否正确
verifyForwardPath,验证forward的path是否正确
verifyNoActionErrors,验证在action执行过程中没有ActionError产生
verifyActionErrors,验证在action执行过程中产生的ActionError集合的内容
如果你action里面有setAttribute之类的方法,也想验证的话。
也可以通过getSession()方法来获取session(request类似)。
跟着再使用getAttribute进行assert就可以组合成自己需要的调试单元了。顺便列举一下assert方法。
assertEquals(), assertNull(), assertSame(), assertTrue(),assertArrayEquals()等..
无论如何,如果你不喜欢使用assert方法,直接输出一下也十分便捷。
希望对大家学习有帮助。
评论
5 楼
Kenny.Lee
2010-01-30
nurenok 写道
你这个测试回影响到数据库,不是正规的企业测试
嗯,谢谢提醒。所以有待提高测试阶段的方法
4 楼
nurenok
2010-01-25
你这个测试回影响到数据库,不是正规的企业测试
3 楼
elan1986
2009-04-02
junit 确实特别的很好用!!!
呵呵!
学习了!!!
谢谢
呵呵!
学习了!!!
谢谢
2 楼
Kenny.Lee
2009-04-01
alone11 写道
JUtil or JUnit?
恍然大悟...
1 楼
alone11
2009-04-01
JUtil or JUnit?
发表评论
-
自定义struts2的url标签的生成
2012-05-08 17:36 2854本文是针对struts2的struts-tags中的s:url ... -
使用VisualVM监测Tomcat JVM情况的配置(Windows+Linux)
2012-04-17 10:02 4412一,Windows环境 1.若以服务的方式启 ... -
【转】Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat
2012-02-10 18:06 2174jstack -- 如果java程序崩溃生成core文件 ... -
DynaBean的体会
2011-12-29 22:16 0在开发中,为了减少一些不必要的VO和formBean(尽管在s ... -
自己的修改hibernate-tools的模板和修复Comment乱码问题
2011-11-02 11:38 8051关于自定义 之前一直用hibernate-tools来 ... -
SpringSecurity备忘配置
2011-11-01 11:37 13101.定义登录后的首页action.do,该action决定了用 ... -
【转】使用 Eclipse Memory Analyzer 检测内存泄漏问题
2011-09-28 11:39 1320本文是关于在开发Talend RCP 过程中碰到 ... -
编写使用SpringSecurity的JUnit测试提醒
2011-08-15 15:40 3461近日在使用SpringSecurity的项目中发现一个小问题, ... -
【转】sun.misc.BASE64Encoder找不到的解决方法
2011-08-09 11:21 3389sun.misc.BASE64Encoder/BASE64De ... -
【转】如何在win7系统上安装Jdk版本1.6
2011-07-27 17:10 1658鉴于有些朋友对JDK的安装不太熟悉,特意转载此教程。原地址如下 ... -
我的eclipse插件推荐
2011-07-03 19:56 114541. ER图工具 ERMaster - http: ... -
使用Jakarta Common Digester解析XML的简单例子
2011-04-19 13:36 2388Jakarta Commons Digester官方网址 ht ... -
精通Hibernate读书笔记
2010-01-31 00:58 1871生成Java类 使用hibernate tools( ... -
Struts2中的EL表达式兼容问题
2009-12-29 16:33 2320今天遇到一个郁闷的问题,页面某段文字显示的时候就显示一半,查看 ... -
获取上传文件的字符编码
2009-11-10 22:50 3542重点又回到了国人都很烦恼的字符编码问题,真羡慕老外们。不过作为 ... -
整合Acegi使用HTTPS安全通道(SSL)
2009-05-15 14:55 2669首先在你使用application s ... -
也谈Java汉字按照拼音排序
2009-04-10 00:11 5594最近项目上使用到汉字排序的问题,网上搜索了一下后普遍使用下面的 ... -
使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session
2009-03-30 23:59 2292首先说明一下,hibernate的延迟加载特性(lazy)。所 ... -
关于获取表单数据
2009-03-28 01:25 4208今天有个同事做二 ...
相关推荐
在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境的搭建是一个非常重要的步骤。本文将详细介绍如何在 Struts2+Spring+Hibernate 框架中搭建 Action 的单元测试环境。 首先,需要了解为什么需要对 ...
同时使用了Struts2、Spring4、Hibernate4、log4j、slf4j、junit4、ehcache等库或框架,搭建一个最基本的项目原型。 三、 三大框架最新版本下载:截止2014-10-01 Struts2.3.6:发布于2014-05-03,目前的最新版本。...
12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...
在《开发者突击:Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)》架构讲解的过程中,穿插介绍了JDBC、Log4j、Sitemesh、JUnit技术。 随书附赠光盘内容包括《开发者突击:Java Web主流框架整合开发(J2EE+...
Struts、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责,组合使用能够构建出高效、灵活的企业级应用程序。在这个简单的例子开发中,我们将深入理解这三个框架的集成和工作原理。 **Struts...
Struts2、Spring4和Hibernate5是Java Web开发中的三个重要框架,它们分别负责MVC模式中的动作控制、依赖注入和持久化管理。这三者的整合可以构建出高效、稳定且易于维护的企业级应用。 **Struts2** 是一个基于MVC...
9. **测试**:编写JUnit测试用例,对各个层的功能进行单元测试,确保整合后的系统能够正常运行。 通过这个例子,开发者可以深入理解这三个框架的协同工作方式,以及如何在实际项目中进行整合。这种整合模式在早期的...
5. 测试和运行:通过JUnit进行单元测试,确保各层功能正常,然后部署应用,测试整个流程是否顺畅。 这个框架组合的优点在于,Struts处理用户请求,Spring管理业务逻辑和服务,Hibernate处理数据持久化,三者分工...
Struts+Spring+Hibernate 整合是开发Java Web应用程序的一种常见模式,也称为SSH框架。这个框架组合提供了从前端到后端的完整解决方案,适用于构建三层架构的应用程序。以下是关于这个话题的详细说明: 1. **Struts...
struts2+spring4+hibernate5的所有jar包所有jar包包括spring Aop基本包、spring Ioc基本包、springweb开发包、spring事务控制、spring整合junit、spring整合struts包、hibernate包、hibernate整合spring包、struts2...
在搭建一个基于Java8 + Tomcat8 + Struts2.5 + Spring4.3 + Hibernate5.2 的项目前,首先需要对开发环境进行配置。 **1. Java8**: 作为项目的运行基础环境,确保已安装Java8,并正确设置JAVA_HOME等环境变量。 **2....
7.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations...
1、 同时使用了Struts2、Spring4、Hibernate4、Quartz、JUnit4、Log4j、SLF4J、Ehcache、Gson等库或框架,搭建一个最基本的项目原型。 2、 Spring配置提供了多种可选整合方案:详见applicationContext.xml的配置 (1...
Struts、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责,组合使用能够构建出高效、灵活的企业级应用程序。"中文Struts+Spring+Hibernate整合开发迅雷"这个主题,主要涵盖的是如何将这三个...
12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...
此外,书中可能还会涉及一些最佳实践和设计模式,如单例模式、工厂模式等,以及如何使用JUnit进行单元测试,确保代码质量。对于想要提升Java EE开发能力的程序员来说,这本书无疑是一份宝贵的资源。 总的来说,《轻...
Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的组合通常被称为SSH(Struts、Spring、Hibernate)。这个“struts+spring+hibernate开发 注册小实例”是为初学者设计的一个教程,目的是帮助他们快速...
《轻量级Java+EE企业应用实战——Struts 2 + Spring + Hibernate整合开发》是针对Java企业级应用开发的一本实战指南,旨在帮助开发者掌握使用Struts 2、Spring和Hibernate三大框架进行高效集成开发的技术与技巧。...
Struts、Spring 和 Hibernate 是Java Web开发中三个非常重要的开源框架,它们分别负责表现层、业务层和服务层的管理。这个框架组合常被称为SSH(Struts-Spring-Hibernate)架构,用于构建高度模块化、低耦合、高内聚...