Spring和Hibernate利用JUnit进行测试,大家已经很熟悉. 
Struts则利用StrutsTest测试. 
下面我们测试一个登录的Struts程序 
LoginForm.java 文件 
package com.bcxy.struts.form; 
import javax.servlet.http.HttpServletRequest; 
import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; 
public class LoginForm extends ActionForm { 
 private String user; 
 private String pass; 
 /**    * Returns the user.   * @return String   */  public String getUser() {   return user;  } 
 /**    * Set the user.   * @param user The user to set   */  public void setUser(String user) {   this.user = user;  } 
 /**    * Returns the pass.   * @return String   */  public String getPass() {   return pass;  } 
 /**    * Set the pass.   * @param pass The pass to set   */  public void setPass(String pass) {   this.pass = pass;  } 
} 
LoginAction.java 文件 
package com.bcxy.struts.action; 
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 
import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; 
import com.bcxy.struts.form.LoginForm; 
public class LoginAction extends Action { 
 /**    * Method execute   * @param ActionMapping mapping   * @param ActionForm form   * @param HttpServletRequest request   * @param HttpServletResponse response   * @return ActionForward   * @throws Exception   */  public ActionForward execute(   ActionMapping mapping,   ActionForm form,   HttpServletRequest request,   HttpServletResponse response)   throws Exception {   LoginForm loginForm = (LoginForm) form;   String user = loginForm.getUser();   String pass = loginForm.getPass();      if(user.equals(pass)){    return mapping.findForward("success");   }else{    return mapping.findForward("fail");   }  } 
} 
struts-config.xml 文件 
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config>          <!-- ========== Data Source Configuration =============================== -->     <data-sources />          <!-- ========== Form Bean Definitions ================================== -->     <form-beans>         <form-bean name="loginForm" type="com.bcxy.struts.form.LoginForm">             <form-property name="user" type="java.lang.String" />             <form-property name="pass" type="java.lang.String" />         </form-bean>     </form-beans>          <!-- ========== Global Exception Definitions ============================== -->     <global-exceptions />          <!-- ========== Global Forward Definitions =============================== -->     <global-forwards />          <!-- ========== Action Mapping Definitions =============================== -->     <action-mappings>      <action       type="com.bcxy.struts.action.LoginAction"       name="loginForm"       path="/login"       scope="request"       validate="false">       <forward name="success" path="/success.jsp"/>       <forward name="fail" path="/fail.jsp"/>      </action>            </action-mappings>     <!-- ========== Controller Configuration ================================ -->     <controller />          <!-- ========== Message Resources Definitions ============================ -->          <!-- ========== Plug Ins Configuration ================================= -->     <message-resources parameter="com.bcxy.struts.ApplicationResources" /> </struts-config> 
下面我们写一个测试文件,它继承strtustest的MockStrutsTestCase类. 
/*  * Created on 2004-10-31  *  */ package test; 
import java.io.File; 
import servletunit.struts.MockStrutsTestCase; 
/**  * @author ezerg  */ public class LoginTest extends MockStrutsTestCase { 
 public LoginTest() {   super();  } 
 /**   * @param arg0   */  public LoginTest(String arg0) {   super(arg0);  }    public void setUp() throws Exception{   super.setUp();   //指明web应用的根   File context = new File("defaultroot");   setContextDirectory(context);  }    public void tearDown() throws Exception{   super.tearDown();  }    public void testLogin(){   //设置action的path   setRequestPathInfo("/login.do");   //准备所需要的参数   addRequestParameter("user", "test");   addRequestParameter("pass", "test");   //执行   actionPerform();   //验证返回的forward   verifyForward("success");  } 
} 
在Eclipse中执行run as JUnit Test可看到结果....
  
主要函数和作用: 
-          setContextDirectory,设置web应用的根 
-          setRequestPathInfo,设置request的请求 
-          addRequestParameter,将参数和对应的值加入request中 
-          actionPerform,执行这个请求 
-          verifyForward,验证forward的名字是否正确 
-          verifyForwardPath,验证forward的path是否正确 
-          verifyNoActionErrors,验证在action执行过程中没有ActionError产生 
-          verifyActionErrors,验证在action执行过程中产生的ActionError集合的内容 
  
   测试Tile。其基本过程与上面类似,不同之处在于验证:使用verifyTilesForward和verifyInputTilesForward。
  
            测试子模块。其基本过程也和上面一样,不同之处在于需要指定该模块所需要使用的struts-config.xml和调用方式: 
-          首先,指定所需要的struts-config.xml: 
setConfigFile("mymodule","/WEB-INF/struts-config-mymodule.xml"); 
-          其次,指明调用的路径: 
setRequestPathInfo("/mymodule","/login.do");
 
  
       使用StrutsTest需要注意的地方: 
-          在TestCase中可以访问request、session等对象,StrutsTest为我们提供了访问接口。 
-          junit的assert函数和fail函数都可以在StrutsTest中使用。 
-  对于文件上载,目前StrutsTest并没有什么特别好的方案。具体参见StrusTest的Faq。 
 
  下载地址:http://sourceforge.net/projects/strutstestcase/
  
 
  |