论坛首页 Java企业应用论坛

webwork2的测试

浏览 4144 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-15  

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>  
   发表时间:2007-04-04  
楼主有没有尝试使用WW自己带的UNIT测试基类呢
0 请登录后投票
   发表时间:2007-04-11  
我用的是spring+hibernate+webwork的,我这样测试的话就报java.lang.NullPointerException,不知道LZ试过没


0 请登录后投票
   发表时间:2007-04-11  
smaer 写道
我用的是spring+hibernate+webwork的,我这样测试的话就报java.lang.NullPointerException,不知道LZ试过没

集成spring进行测试的情况,需要自己加载spring context.Action也需要从spring context中取出。
0 请登录后投票
   发表时间:2007-04-12  
现在的问题是,我从来没做过这种类型的,能不能告诉我个具体讲这方面的网站或者帮我写一个demo给我看看,谢谢了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics