类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:










页面导航:
正文内容: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/