`
lyx_2709
  • 浏览: 314006 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Junit测试Action

阅读更多
Email:lyx_happy@163.com
本文内容:
Junit测试Action
本文也是在上两个视频的基础进行改动,所以在看本文之前请大家先参考上两个视频。
在没有讲Junit之前,我们首先来了解一下webwork ServletDispatcher的工作原理
ServletDispatcher是默认的处理Web Http请求的调度器,是WebWork框架的控制器。相当于struts1.1ActionServlet,同样我们也可以向Struts那样对其进行扩展,但一般情况下默认的就满足了我们的开发要求,在Struts1.2中,把大多数功能已经移植到requsetprocess中。也就是说在struts中如果想扩展控制器,我们直接继承org.apache.struts.action.RequestProcessor类就可以。如下代码:
java 代码
  1. public class MyRequestProcessor extends RequestProcessor {   
  2.   
  3.       protected boolean processPreprocess(javax.servlet.http.HttpServletRequest request,   
  4.               javax.servlet.http.HttpServletResponse response)  {   
  5. try {   
  6. request.setCharacterEncoding("GBK");   
  7. }   
  8. catch (UnsupportedEncodingException ex) {   
  9. }   
  10. System.out.println("My Request Processor is working...");   
  11. return true;   
  12. }   
在struts中就解决了中文乱码的问题,当然要启动这个控制器,要在struts-config.xml进行配置。配置如下:  <controller processorclass="com.lyx. MyRequestProcessor "></controller>.说了一大多struts的东西.回头来我们来看看webwork又是怎么执行的。
 
所有对Action调用的请求都将通过这个ServletDispatcher调度。它将在web.xml里配置ServletDispatcher时指定。ServletDispatcher接受客户端的HTTP请求,再传给我们的XWork框架,由我们的XWork框架去解析我们的xwork.xml配置文件,根据配置文件的信息,创建对应的Action,组装并调用相应的拦截器,执行Action。当然如果我们想进行扩展我们可以实现com.opensymphony.xwork.interceptor.Interceptor接口,有好多功能供你使用。
ServletDispatcher的主要功能调用如下:
一、init()方法在服务器启动时调用,
 1、检查是否支持配置文件重新载入功能。
 2、设置一些文件上传的信息,比如:上传临时目录,上传的最大字节等。都设置在webwork.properties文件里,如果在classpath中找不到这个属性文件,它会去读取默认的default.properties
当然还有更多的功能,大家可以参考webwork的帮助文档
 
二、service()方法,每次客户端的请求都将调用此方法。
  通过request请求取得action的命名空间(namespace,与xwork.xml配置文件里package标签的name对应)
  例如:我们的例子中com.lyx.web.action.LoginAction,取得的命名空间为com.lyx.web.action
在xwork.xml配置文件如下:
xml 代码
  1. <package name="default" extends="webwork-default">  
  2.         <action name="login" class="com.lyx.web.action.LoginAction">  
  3.     action>  
  4.     package>  
这些代码大家应该很熟悉吧,就不多述了。
如果要进行单元测试还有一个是我们必须关注的extraContext。我们可以通过ActionServlet的方法或是属性得到。至于原理在这里就不多说了,大家可以参考webwork中文文档上面写的很详细。
根据前面获得的namespace、actionName、extraContext,创建一个ActonProxy。
创建代码如下:
java 代码
  1. ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(   
  2.                 "com.lyx.web.action""login", extraContext);   
这个ActionProxy可以读取namespace、actionName读取xwork.xml配置文件里这个Action的所有配置信。
有了namespace,actionName,extraContext,ActionProxy我们就可以完成单元测试了。
新建一个Junit类代码如下:
结合上述的文档,试试吧。
这里一定要注意junit包一定要引入。
java 代码
  1. import java.util.HashMap;   
  2. import java.util.Map;   
  3.   
  4. import com.opensymphony.xwork.ActionContext;   
  5. import com.opensymphony.xwork.ActionProxy;   
  6. import com.opensymphony.xwork.ActionProxyFactory;   
  7.   
  8. import junit.framework.TestCase;   
  9.   
  10. public class LoginActionTest extends TestCase {   
  11.     @SuppressWarnings("unchecked")   
  12.     public void testExecute() throws Exception {   
  13.         Map params = new HashMap();   
  14.         params.put("user.userName""lyx");   
  15.         params.put("user.userPwd""lyx");   
  16.         Map extraContext = new HashMap();   
  17.         extraContext.put(ActionContext.PARAMETERS, params);   
  18.   
  19.         ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(   
  20.                 "com.lyx.web.action""login", extraContext);   
  21.         proxy.setExecuteResult(false);   
  22.         assertEquals(proxy.execute(), "success");   
  23.   
  24.         LoginAction action = (LoginAction) proxy.getAction();   
  25.         assertEquals(action.getUser().getUserName(), "lyx");   
  26.         assertEquals(action.getUser().getUserPwd(), "lyx");   
  27.   
  28.     }   
  29.   
  30. }   
基本的代码就写完了,还有其它的没有解释,大家再回来看看。就应该可以明白了。
在建一个TestSuite测试一下吧。
java 代码
  1. package test.com.test;   
  2.   
  3. import junit.framework.Test;   
  4. import junit.framework.TestSuite;   
  5.   
  6. public class AllTests {   
  7.   
  8.     public static Test suite() {   
  9.         TestSuite suite = new TestSuite("Test for test.com.test");   
  10.         //$JUnit-BEGIN$   
  11.         suite.addTestSuite(LoginActionTest.class);   
  12.         //$JUnit-END$   
  13.         return suite;   
  14.     }   
  15.   
  16. }   
运行此类,如果全是绿色,就通过了。试试看吧。
OK通过了,测试的用户名和密码都为”lyx”,改一下试试。
改了密码就对了。呵呵。
OK了。就到这里吧。
希望大家多提宝贵意见。上面有的我联系方式。
分享到:
评论
2 楼 wyx510713 2012-03-08  
视频打不开啊?
1 楼 horror 2007-06-01  
老师,webwork我就跟你学了,谢谢您

相关推荐

    Junit in Action 中文版

    JUnit in Action中文版,用于java单元测试

    JunitInAction源代码2

    JunitInAction书中的源代码,便于Java开发者和测试人员使用Junit框架从代码层面进行白盒测试。

    JUnit in Action【英文清晰版】

    本书主要介绍在Java软件开发中使用JUnit进行测试的原则、技巧与实践,深入阐述如何编写自动测试。把一段代码隔离开来测试有什么好处,如何判断何时需进行整合测试......

    junit in action 中文版电子书

    介绍junit的中文版电子书,是很不错的学习测试用的资料。

    JUnit In Action第二版英文版

    Manning的in Action,是一套非常实用的书,能够帮助读者对相关技术快速上手。 这一本是JUnit in Action第二版的,由于这不是正式发售的版本,属于测试版本,因此书中可能存在一些缺陷。

    JUnit in Action中文版.pdf

    主要介绍了在Java软件开发中使用JUnit进行测试的原则、技巧与实践,深入阐述如何编写自动测试,把一段代码隔离开来测试有什么好处,如何判断何时需要进行整合测试,并对如何测试完整的J2EE应用进行了极具价值的讨论...

    Manning - JUnit in Action.pdf

    Manning 的经典书籍《JUnit in Action》,教你如何做好JUnit测试!

    JunitInAction源代码

    JunitInAction书中的源代码,便于Java开发者和测试人员使用Junit框架从代码层面进行白盒测试。

    JUnit.in.Action中文版

    ·用mock objects进行隔离测试(★★★★★) ·用Cactus进行容器内测试 ·用Ant和Maven进行自动构建(★★★★★) ·在Eclipse内进行测试 ·对如下内容进行单元测试  ◆Java应用程序(★★)  ◆Filter  ◆...

    JUnit.in.Action中文版.pdf

    详细讲解如何用junit搭建测试框架,适合初学者和希望进一步了解单元测试的人

    Junit实战(第2版)

    由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mockobjects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit...

Global site tag (gtag.js) - Google Analytics