1. StrutsTestCase 简介
StrutsTestCase 是标准 Junit TestCase 的一个扩展,为Struts framework提供了方便灵活的测试代码
StrutsTestCase 用 ActionServlet controller 进行测试,我们可测试Action object, mapping, form bean, forwards
StrutsTestCase 提供了 Mock Object 和 Cactus 两种方法来运行Struts ActionServlet,允许在 servlet engine 内或外来测试。
MockStrutsTestCase 使用一系列HttpServlet 模仿对象来模拟容器环境,CactusStrutsTestCase 使用Cactus testing framework在实际的容器
中测试
2. 看StrutsTestCase如何工作
我们用的例子是验证用户名和密码的action,只要接受参数然后进行简单的逻辑验证行了,所以我们要做的是:
(1)建好目录,准备必要的jar 文件,struts-config.xml, 资源文件
(2)action,formbean 的源文件
(3)test 的源文件
(4)编写ant 文件,进行测试
这里我们用MockStrutsTestCase,CactusStrutsTestCase 的用法也是一样的,只要改一下继承类行了
先建立目录结构
strutstest
|-- src
|-- war
|-- |-- WEB-INF
|-- |-- |-- classes
|-- |-- |-- lib
把struts 所需要的jarfile 和 strutstest, junit 放入lib
然后写struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<!--
This is the Struts configuration file for the "Hello!" sample application
-->
<struts-config>
<!-- ======== Form Bean Definitions =================================== -->
<form-beans>
<form-bean name="LoginForm" type="LoginForm"/>
</form-beans>
<!-- ======== Global Forwards ====================================== -->
<global-forwards>
<forward name="login" path="/login.jsp"/>
</global-forwards>
<!-- ========== Action Mapping Definitions ============================== -->
<action-mappings>
<!-- Say Hello! -->
<action path = "/login"
type = "LoginAction"
name = "LoginForm"
scope = "request"
validate = "true"
input = "/login.jsp"
>
<forward name="success" path="/hello.jsp" />
</action>
</action-mappings>
<!-- ========== Message Resources Definitions =========================== -->
<message-resources parameter="application"/>
</struts-config>
资源文件我们这里只写一个用于测试的错误信息行了, application.properties :
error.password.mismatch=password mismatch
写LoginForm 来封状用户名和密码:
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class LoginForm extends ActionForm {
public String username;
public String password;
public void setUsername( String username ) {
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword( String password ) {
this.password = password;
}
public String getPassword(){
return password;
}
}