论坛首页 入门技术论坛

StrutsTestCase测试Action问题

浏览 2598 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-04-08  

以下代码是登录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

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

 

另:

上面的测试代码运行失败
提示如下:
junit.framework.AssertionFailedError: expected: <8000> but was: <null>
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.failNotEquals(Assert.java:277)
at junit.framework.Assert.assertEquals(Assert.java:64)
at junit.framework.Assert.assertEquals(Assert.java:71)
at com.zzy.test.action.user.TestUserLoginAction.testLoginSuccess(TestUserLoginAction.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:228)
at junit.framework.TestSuite.run(TestSuite.java:223)
at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

   发表时间:2008-04-18  
有什么好办法不?
我一直找不到方法来解决它!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics