google搜索 51Testing站内搜索                    软件测试门户 | 软件测试培 训 | 文章资料精选 | 软件测试论坛 | 软件测试博客 | 测试招聘求职 
打印

StrutsTestCase测试Action问题

本主题由 fishy 于 2008-4-9 17:04 移动

StrutsTestCase测试Action问题


以下代码是登录Action中一段,使用StrutsTestCase该如何进行单元测试?
重点问题是
tusers = udao.findWhereUserIDEquals(userID);
这里的findWhereUserIDEquals()方法会在数据库中进行查找,测试时不好操作

UserLoginAction.java
复制内容到剪贴板
代码:
public ActionForward login(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)throws Exception{
        String userID = WebParamUtils.getParameter(request, "userID", "");
        String password = this.getParameter(request, "userpass", "");        
        TbFilesystemusersDao udao = TbFilesystemusersDaoFactory.create();
        TbFilesystemusers[] tusers = null;
        TbFilesystemusers tuser = null;
        try{
            tusers = udao.findWhereUserIDEquals(userID);
            if(tusers == null || tusers.length == 0){
                request.setAttribute("message", "请您输入正确用户名及密码!");
                return mapping.findForward("logout");
            }
            tuser = tusers[0];
            request.setAttribute("userid", username);
            if( !password.equals(tuser.getUserPwd().trim())){
                request.setAttribute("message", "请您输入正确用户名及密码!");
                return mapping.findForward("logout");
            }        
            Role roles[] = rdao.findWhereRoleCodeEquals(tuser.getUserrole());
            Role role = null;
            if(roles != null && roles.length > 0){
                role = roles[0];
            }
            request.getSession().setAttribute(Const.ROLE, role);            
            request.getSession().setAttribute(Const.LOGIN_USER, tuser);
        }catch(Exception ex){
            ex.printStackTrace();
            request.setAttribute("message", "请您输入正确用户名及密码!");
            return mapping.findForward("logout");
        }   
        return mapping.findForward("success");
    }
有想法使用MockStrutsTestCase来测试,自己写了个MockUserLoginAction继承上面的UserLoginAction

代码如下:
复制内容到剪贴板
代码:


public class MockUserLoginAction extends UserLoginAction{
   
    public ActionForward login(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception
    {
        String username = WebParamUtils.getParameter(request, "username", "");
        String password = this.getParameter(request, "userpass", "");
        System.out.println("username");
        System.out.println("password");
        if(username == null || username.length()== 0){
            request.setAttribute("message", "请您输入正确用户名及密码!");
            return mapping.findForward("logout");
        }
        if(username!="8000"||password!="123456")
        {
            request.setAttribute("message", "请您输入正确用户名及密码!");
            return mapping.findForward("logout");
        }
        request.setAttribute("userid", username);
        return mapping.findForward("success");
    }
}
测试类代码如下:
复制内容到剪贴板
代码:


public void testLoginSuccess() throws Exception
{
    STCRequestProcessor.addMockAction("com.zzy.record.action.user.UserLoginAction","com.zzy.record.action.user.MockUserLoginAction");
    setRequestPathInfo("/loginAction");
    addRequestParameter("method","login");
    addRequestParameter("username","8000");
    addRequestParameter("userpass","123456");
    actionPerform();
    //verifyForward("success");
    assertEquals("8000",this.getMockRequest().getAttribute("userid"));
    }
但运行出错
错误信息如下:

Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.zzy.record.jdbc.ResourceManager.getConnection(ResourceManager.java:13)
at com.zzy.record.jdbc.TbFilesystemusersDaoImpl.findByDynamicSelect(TbFilesystemusersDaoImpl.java:1029)
... 34 more


有没有其它办法可对其进行单元测试?
万分感谢!!!

TOP

 
当前时区 GMT+8, 现在时间是 2008-7-24 19:00Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹