查看完整版本: StrutsTestCase测试Action问题

fairylly 2008-4-8 16:28

StrutsTestCase测试Action问题

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

[b]UserLoginAction.java[/b]

[code]
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");
    }[/code]



有想法使用MockStrutsTestCase来测试,自己写了个MockUserLoginAction继承上面的UserLoginAction

代码如下:

[code]

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");
    }
}
[/code]



[b]测试类代码如下:[/b]


[code]

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"));
    }

[/code]


但运行出错
错误信息如下:

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


[b]有没有其它办法可对其进行单元测试?
万分感谢!!![/b]
页: [1]
查看完整版本: StrutsTestCase测试Action问题