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

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中文教程

    WebWork2的核心设计原则是减少样板代码,提高开发效率,并提供更好的可测试性。 首先,让我们来看看WebWork2的控制器层。WebWork2的动作(Action)是处理用户请求的核心组件,它接收HTTP请求,执行业务逻辑,并将...

    webwork2官方文档中文版

    9. **测试工具**:WebWork2提供了单元测试和集成测试的支持,便于开发者进行质量保证。 10. **最佳实践和示例**:官方文档会包含一系列最佳实践指导和示例代码,帮助开发者快速上手并避免常见陷阱。 通过阅读...

    WebWork2配置

    9. **测试与调试**:WebWork2提供了良好的测试支持,你可以配置Action的模拟对象以进行单元测试,同时通过日志配置来帮助调试。 10. **安全设置**:WebWork2允许你配置安全性相关的设置,如防止XSS攻击、CSRF防护等...

    java私塾][Spring讲解+webwork2整合+webwork2整合全套

    根据提供的文件信息,我们可以推断出这是一篇关于Java私塾中的Spring框架讲解与WebWork2整合教程的文章。下面将围绕这些关键词展开详细的讲解。 ### Spring框架基础 #### Spring简介 Spring是一个开源框架,最初由...

    webwork2中文文档

    8. **测试与调试**:提供关于单元测试、集成测试和调试WebWork2应用的方法,可能包括JUnit和Mockito的使用。 9. **最佳实践与性能优化**:分享一些开发WebWork2应用的最佳实践,以及如何优化应用程序性能,如减少...

    Webwork2开发指南.pdf

    Webwork2支持依赖注入,有助于降低组件之间的耦合度,提高代码的可测试性和可维护性。 10. **最佳实践和设计模式** "Webwork2开发指南"可能涵盖了如何遵循最佳实践来开发Webwork2应用,包括如何合理划分Action...

    Webwork2_guide

    通过“Webwork2_guide.pdf”,读者将能够深入学习如何利用Webwork2的各种特性,包括Action的设计、拦截器的编写、配置文件的配置、异常处理和测试方法等,从而成为一名熟练的Webwork2开发者。这个指南对于初学者和...

    WebWork2 开发指南

    WebWork2 的设计目标是简化Web开发,提高代码的可维护性和可测试性,同时保持高度的定制能力。本指南将深入探讨WebWork2 的核心概念、特性以及最佳实践。 一、WebWork2 核心概念 1. MVC模式:WebWork2 遵循MVC架构...

    webwork2实例源代码

    6. **依赖注入(Dependency Injection,DI)**:WebWork2支持依赖注入,允许开发者通过配置文件或注解来管理对象的创建和依赖关系,提高代码的可测试性和解耦度。 7. **Ognl(Object-Graph Navigation Language)**...

    Webwork2 开发指南

    Webwork2支持单元测试和集成测试,可以使用JUnit和其他测试工具进行动作类和业务逻辑的测试。 为了深入了解Webwork2,阅读《Webwork2 开发指南》和《webwork深入浅出.pdf》是非常有帮助的。这两份文档会详细解释...

    Webwork2 Guide.pdf

    Spring框架作为企业级应用的主流框架之一,与Webwork2的结合可以实现更为强大的业务逻辑管理和依赖注入,进一步增强应用的灵活性和可测试性。 #### WebWork 配置说明 Webwork2的配置是框架应用的关键,正确的配置...

    WebWork docs 2 -- webWork 详细的说明文档

    11. **测试**:WebWork支持单元测试和集成测试,文档会讲解如何编写和运行针对WebWork应用的测试。 12. **最佳实践**:除了技术细节,文档还会提供一些开发和设计的最佳实践,帮助开发者遵循良好的编程习惯。 通过...

    WebWork2学习笔记

    WebWork2是一个基于Java的轻量级Web应用框架,它为开发人员提供了强大的MVC(模型-视图-控制器)架构支持,简化了Web应用程序的开发。本学习笔记将深入探讨WebWork2的核心概念、主要特性以及如何在实际项目中应用。 ...

    webwork2开发指南

    - **测试与调试**:通过HTTP客户端工具或浏览器测试应用,利用WebWork2提供的日志和调试工具进行问题排查。 **3. 学习资源** "Webwork2开发指南"这本书可能涵盖了如下主题: - WebWork2的安装和配置 - MVC模式的...

    WebWork2开发指南-程序设计

    为了提高开发效率,WebWork2支持模拟请求进行单元测试,开发者无需启动服务器即可测试Action。此外,其内置的日志系统和调试工具提供了丰富的信息,帮助开发者定位问题。 七、Maven集成与插件扩展 WebWork2可以很好...

    webwork2-spring.jar

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

    webwork

    ### WebWork2开发指南概述 WebWork框架,作为OpenSymphony组织下的开源项目,一度在Apache Struts等框架的光环下显得低调而神秘。然而,它凭借着强大的功能和灵活的设计,逐渐吸引了众多开发者的眼球。WebWork框架...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    10. **测试支持**:WebWork1.4版本提供了JUnit集成,便于进行单元测试和集成测试,确保代码的质量。 "www.pudn.com.txt"可能是一个文档,可能包含了一些关于WebWork的学习资源或教程链接。而"webwork"这个文件可能...

Global site tag (gtag.js) - Google Analytics