`
lyx_2709
  • 浏览: 314666 次
  • 性别: 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 单元测试完整案例

    4. 测试Action类:通过模拟Service层的依赖,直接测试Action类的execute()方法,确保业务逻辑的正确性。 四、测试实践 在案例中,你将看到如何创建测试类,定义测试方法,设置测试数据,以及如何利用JUnit和Spring...

    JUnit in Action 3nd Edition

    "JUnit in Action 3rd Edition" JUnit是一种流行的Java单元测试框架,由Kent Beck和Eric Gamma于1997年创立。JUnit在软件测试领域中扮演着重要的角色,帮助开发者编写高质量的代码。下面是关于JUnit的重要知识点: ...

    JUnit in Action 中文版电子书

    《JUnit in Action 中文版》是一本专注于Java测试框架JUnit的专业书籍,旨在帮助读者深入了解和熟练运用JUnit进行单元测试。JUnit作为Java开发中不可或缺的工具,对于保证代码质量、提高软件可维护性起到了至关重要...

    JUnit in Action中文版.

    在详细讲解JUnit的基础知识时,书中涵盖了如何创建和运行基本的JUnit测试用例,包括断言的使用、测试注解的理解以及异常处理。此外,还介绍了如何利用JUnit的@Test注解来定义测试方法,以及如何使用@Before和@After...

    Junit in Action 中文版

    《JUnit in Action》是一本专为Java开发者设计的单元测试指南,它深入介绍了如何有效地使用JUnit框架进行软件质量保证。本书以中文版的形式提供,旨在帮助中国的开发者更好地理解和应用单元测试这一关键的软件开发...

    junit in action 源码

    《JUnit in Action》是一本广泛认可的Java单元测试框架JUnit的实战指南,它深入浅出地介绍了如何有效地使用JUnit进行软件测试。这本书的源码包含了书中提到的各种示例和实践案例,是学习和理解JUnit功能及其实现原理...

    JUnit in action JUnit Recipies

    《JUnit in Action》和《JUnit Recipes》是两本关于Java单元测试的重要书籍,它们深入浅出地介绍了如何使用JUnit框架进行高效、可靠的测试。JUnit是一个流行的开源测试框架,广泛用于Java应用程序的单元测试,它提供...

    junit in action 中文版

    第四部分可能涉及持续集成和测试自动化,介绍如何将JUnit测试纳入构建过程,利用工具如Jenkins、Travis CI等进行持续测试,确保代码质量始终保持高水平。 最后,书中可能会探讨一些最佳实践和设计原则,比如如何...

    JUnit In Action的源代码

    《JUnit In Action》是一本专注于Java测试框架JUnit的实战书籍,源代码的提供是为了让读者更好地理解和实践书中介绍的各种测试技术和方法。JUnit是Java开发者进行单元测试的重要工具,它的使用和理解对于提升软件...

    JunitInAction源代码2

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

    JUnit in Action(JUnit经典书籍)中文+英文

    《JUnit in Action》是一本专为Java开发人员深入理解单元测试框架JUnit而编写的经典书籍。本书详尽地探讨了如何有效地使用JUnit进行软件测试,包括基础概念、高级特性和最佳实践,旨在帮助读者提升软件质量,降低...

Global site tag (gtag.js) - Google Analytics