`
san_yun
  • 浏览: 2602146 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

webwork2的测试

阅读更多

webwork2分为webwork和xwork,通过webwork和xwork的解耦,我们的测试已经可以脱离HTTP协议了

比如我们有一个简单的用户注册功能,

Domain Object: User类

Business Object: UserDao类

Action :RegisterAction

java 代码
  1. package mypackage;   
  2.   
  3. public class User {   
  4.     private String username;   
  5.     private String password;   
  6.     private String age;   
  7.     private String tel;   
  8.     User(){   
  9.            
  10.     }   
  11.     public String getAge() {   
  12.         return age;   
  13.     }   
  14.     public void setAge(String age) {   
  15.         this.age = age;   
  16.     }   
  17.     public String getPassword() {   
  18.         return password;   
  19.     }   
  20.     public void setPassword(String password) {   
  21.         this.password = password;   
  22.     }   
  23.     public String getTel() {   
  24.         return tel;   
  25.     }   
  26.     public void setTel(String tel) {   
  27.         this.tel = tel;   
  28.     }   
  29.     public String getUsername() {   
  30.         return username;   
  31.     }   
  32.     public void setUsername(String username) {   
  33.         this.username = username;   
  34.     }   
  35. }   

UserAction:

java 代码
  1. package mypackage;   
  2.   
  3. import com.opensymphony.xwork.Action;   
  4. public class UserAction implements Action {   
  5.   
  6.     private User user = new User();   
  7.   
  8.     public String execute() throws Exception {   
  9.   
  10.         System.out.println("begin execute!......");   
  11.         UserDao.saveUser(user);   
  12.         return SUCCESS;   
  13.     }   
  14.   
  15.     public User getUser() {   
  16.   
  17.         return user;   
  18.     }   
  19. }   
java 代码
  1. package mypackage;   
  2. public class UserDao {   
  3.   
  4.     public static void saveUser(User user) {   
  5.               System.out.println("save User");   
  6.      }   
  7.   
  8. }  

 

如果是平时测试,可能需要打开web server来测试,但是由于webwork2采用xwork核心,它不与特定的面向HTTP的Servlet发生关联,所以我们测试的时候完全不需要打开web服务器,我们只需要提供一个map就可以达到测试的要求

java 代码
  1. package test;   
  2.   
  3. import java.util.HashMap;   
  4. import java.util.Map;   
  5. import junit.framework.TestCase;   
  6. import com.opensymphony.xwork.ActionProxy;   
  7. import com.opensymphony.xwork.ActionProxyFactory;   
  8.   
  9. public class TestWebWork extends TestCase {   
  10.   
  11.     Map items;   
  12.   
  13.     protected void setUp() throws Exception {   
  14.         super.setUp();   
  15.         items = new HashMap();   
  16.         items.put("user.username""sanyun");   
  17.         items.put("user.password""123456");   
  18.     }   
  19.   
  20.     public void testWebwork() throws Exception {   
  21.         ActionProxyFactory factory = ActionProxyFactory.getFactory();   
  22.         // 第一个参数表示namesapce   
  23.         // 第二个参数表示action name   
  24.         // 第三个参数表示是否执行返回的结果,如果result返回是action就可能需要再次执行,这里就不需要   
  25.         // 第三个参数表示是否清理Context   
  26.         ActionProxy proxy = factory.createActionProxy("default""register",   
  27.                 items, falsetrue);   
  28.         //  执行action,控制台会打印 begin execute!......表示Action确实执行了   
  29.         String result = proxy.execute();   
  30.         String uaername = (String) proxy.getInvocation().getStack().findValue(   
  31.                 "user.username");   
  32.         String passwork = (String) proxy.getInvocation().getStack().findValue(   
  33.                 "user.password");   
  34.            
  35.         assertEquals("success", result);   
  36.         assertEquals("sanyun", uaername);   
  37.         assertEquals("123456", passwork);   
  38.     }   
  39.   
  40.     protected void tearDown() throws Exception {   
  41.         super.tearDown();   
  42.     }   
  43.   
  44. }   

这里没有看不到一个HttpServletRequest, HttpServletResponse,因为xwork不会和特定的Servlet打交道(也许是FTP,JMS,都有可能),webwork才会和具体的HttpServlet打交道 webwork通过com.opensymphony.webwork.dispatcher.FilterDispatcher把application,session,parameter,等等都放在一个HashMap中,以后在xwork中就只会操作map里面的数据了

配置文件:必须放在classpath的根目录下

xml 代码
  1. <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"    
  2. "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">  
  3. <xwork>  
  4.     <include file="webwork-default.xml" />    
  5.     <package name="default" extends="webwork-default">     
  6.   
  7.         <action name="register" class="mypackage.RegisterAction">  
  8.             <interceptor-ref name="params"/>  
  9.             <result name="success" >success.jsp</result>  
  10.                
  11.         </action>  
  12.            
  13.     </package>  
  14. </xwork>  

简单说明:package name就是 namespace,interceptor-ref表示拦截器,,webwork使用拦截器来实现控制反转.,比如  对于每个action都有可能需要获取请求页面的参数,记录日志,等等,这些任务并不和本身的业务逻辑沾边, 我们把这些系统级的任务称为基础设施,我们可以把这些基础设施抽象出来,如果我们的客户程序需要用到获取请求页面的功能,只需要在配置文挡里面配置就可以了,客户程序不需要显示的调用getParameter("username"),这就是为什么我们Action里面没有这些方法的原因了. 拦截器是通过动态代理来实现的.

最后需要配置web.xml,主要是把com.opensymphony.webwork.dispatcher.FilterDispatcher设置成前端分发器,处理所有的页面请求而已.

xml 代码
  1. <?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"   
  3. "http://java.sun.com/dtd/web-app_2_3.dtd">  
  4. <web-app>  
  5.   
  6.     <display-name>Acme Corp</display-name>  
  7.     <filter>  
  8.         <filter-name>webwork</filter-name>  
  9.         <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher   
  10.         </filter-class>  
  11.     </filter>  
  12.   
  13.     <filter-mapping>  
  14.         <filter-name>webwork</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  17.   
  18. </web-app>  
分享到:
评论
4 楼 smaer 2007-04-12  
现在的问题是,我从来没做过这种类型的,能不能告诉我个具体讲这方面的网站或者帮我写一个demo给我看看,谢谢了
3 楼 slaser 2007-04-11  
smaer 写道
我用的是spring+hibernate+webwork的,我这样测试的话就报java.lang.NullPointerException,不知道LZ试过没

集成spring进行测试的情况,需要自己加载spring context.Action也需要从spring context中取出。
2 楼 smaer 2007-04-11  
我用的是spring+hibernate+webwork的,我这样测试的话就报java.lang.NullPointerException,不知道LZ试过没


1 楼 zinking 2007-04-04  
楼主有没有尝试使用WW自己带的UNIT测试基类呢

相关推荐

    webwork2-spring.jar

    用于集成WebWork2.1和Spring的一个jar文件,编译级别jdk1.4, 已测试过,可以整合

    webwork2.2.7+spring+hibernate用到的包lib

    webwork2.2.7+spring+hibernate+Mysql集成开发用到的包,其中包括了spring Junit4测试包。

    webwork所需要的包

    绝对能用的jar包经过本人测试的,目前有些人的上传的包是不能用的,我把我自己配置好的 共享出来给大家分享

    Struts2中关于ValueStack的一些操作

    2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...

    spring+ibatis+webwork框架搭配

    数据库使用的是oracle。 其中的数据库连接需要根据你的实际进行修改。 测试类里面的操作数据库的信息需要做一些相应的更改,对应你要操作的测试表进行建javaban。

    struts2总结第一章

    a) Struts2是以web work优秀的设计思想为核心,吸收了struts1的部分优点,建立了一个基于webwork和struts1的MVC框架。 二、 优点: a) 结构清晰,使开发者只关注业务逻辑实现即可。 b) 提供了丰富的标签,大大提高了...

    struts2的总结,适合初学者

    1、是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的。所以掌握servlet是掌握mvc的关键。 2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。 3、...

    深入浅出struts2

    │深入浅出STRUTS 2 Struts Ti却发现了二者在技术与开发人员这两个层面上的共同之处,不久之后,两个项目就在WebWork的技术基础上进行了合并2。 当我们说起WebWork的时候,我们实际上说的是两个项目——XWork和...

    struts项目学习笔记

    由传统Struts1和WebWork两个经典框架发展而来 Struts2框架=Struts2+XWork Strust2 核心功能 允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,没有实现,getter,setter方法)对象 作为Action,没有耦合 ...

    AppFuse学习笔记(J2EE入门级框架)

    用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库...

    Spring in Action(第二版 中文高清版).part2

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    struts2接收数组参数demo

    亲自做了一个struts2后台接收前台jsp页面传来的数组参数demo,因为参考网上的资源如用webwork表单提交等集成到项目有问题,所以做了一个单独的demo,经测试,用表单提交类似users[0].name,users[1].name的数组参数是...

    appfuse 学习笔记

    用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库...

    Spring in Action(第2版)中文版

    16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...

    WebWork-TaxiExpress:申请的士公司

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。...如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用其他标记语言。

    Appfuse开发教程

    用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库...

    Spring in Action(第二版 中文高清版).part1

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    2024 最新 毕业设计 高校学生选课系统项目源码.rar

    2. **关键策略**:Spring框架的关键策略包括低侵入性编程、松耦合和DI(依赖注入)。这些策略有助于提高代码的可维护性和可测试性。 3. **模块和特性**:Spring框架由多个模块组成,包括核心容器、数据访问/集成、...

    交友平台毕业设计

    毕业论文使用jsp+webwork+spring+jdbctemplete+MySQL开发 而jsp运用了大量的jstl,吸收了freemarker的大部分精华 毕业论文包括以下模块: 登录、注册、用户管理、角色管理、权限管理,用户角色,角色权限,模块...

Global site tag (gtag.js) - Google Analytics