您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
用StrutsTestCase测试Struts
作者:网络转载 发布时间:[ 2013/2/18 14:04:15 ] 推荐标签:

下面开始写要测试的action, LoginAction:

import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.util.*;

public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {

String username = ((LoginForm) form).getUsername();
String password = ((LoginForm) form).getPassword();

ActionErrors errors = new ActionErrors();

if ((!username.equals("deryl")) || (!password.equals("radar")))
errors.add("password",new ActionError("error.password.mismatch"));

if (!errors.isEmpty()) {
saveErrors(request,errors);
return new ActionForward(mapping.getInput());
}

HttpSession session = request.getSession();
session.setAttribute("authentication", username);

// Forward control to the specified success URI

return mapping.findForward("success");

}


}
[code]
这里我们接收到包含用户信息的formbean, 首先得到登录信息,然后验证是否有效,如果无效,创建ActionError 信息转到登陆页面,如相符,把验证信息保存到session, 然后转到下个页面。

有这些事情我们可以测试:
(1)LoginForm 工作正常吗?如果在请求中放入合适的参数它会正确的被初始化吗?
(2)如果用户名和密码不匹配,是否适当的错误信息被保存?是否会转到登陆页面?
(3)如果我们提供正确的登陆信息,可以得到正确的页面吗?可以确定不会报错吗?验证信息被保存到session了吗?

StrutsTestCase 赋予你测试所有情况的能力,自动为你启动ActionServlet

先来写一个空的test case, 他和 junit 非常相似
[code]
public class TestLoginAction extends MockStrutsTestCase {

public void setUp() { super.setUp(); } // 如果要重写 setUp(), 则必须显式调用super.setUp()

public void tearDown() { super.tearDown(); }

public TestLoginAction(String testName) { super(testName); }

public void testSuccessfulLogin() {}

}


下面正式写这个测试,向testSuccessfulLogin中添加:
(1)指定一个和struts mapping 相关联的路径,需要说明的是,ActionServlet 默认的搜索WEB-INF下的struts-config.xml, 如果struts-config.xml放在了别的目录下,要在此之前调用setConfigFile()
setRequestPathInfo("/login");[code]
(2)通过request 对象向 formbean 传递参数
[code]
addRequestParameter("username","deryl");
addRequestParameter("password","radar");

(3)让 Action 执行
actionPerform();

该方法将模拟从浏览器端访问 servlet 容器内的 LoginAction 的过程,先把请求转发给 ActionServlet,ActionServlet再把表单数据组装到LoginForm中,把请求转发给LoginAction
(4)验证转到了正确的页面
verifyForward("success");

(5)确认验证信息被保存到了session
assertEquals("deryl",(String) getSession().getAttribute("authentication"));

(6)确认没有错误信息
verifyNoActionErrors();

上一页123下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd