51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3399|回复: 0
打印 上一主题 下一主题

StrutsTestCase测试Action问题

[复制链接]
  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    跳转到指定楼层
    1#
    发表于 2008-4-8 16:28:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    以下代码是登录Action中一段,使用StrutsTestCase该如何进行单元测试?
    重点问题是
    tusers = udao.findWhereUserIDEquals(userID);
    这里的findWhereUserIDEquals()方法会在数据库中进行查找,测试时不好操作

    UserLoginAction.java
    1. public ActionForward login(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)throws Exception{
    2.         String userID = WebParamUtils.getParameter(request, "userID", "");
    3.         String password = this.getParameter(request, "userpass", "");        
    4.         TbFilesystemusersDao udao = TbFilesystemusersDaoFactory.create();
    5.         TbFilesystemusers[] tusers = null;
    6.         TbFilesystemusers tuser = null;
    7.         try{
    8.             tusers = udao.findWhereUserIDEquals(userID);
    9.             if(tusers == null || tusers.length == 0){
    10.                 request.setAttribute("message", "请您输入正确用户名及密码!");
    11.                 return mapping.findForward("logout");
    12.             }
    13.             tuser = tusers[0];
    14.             request.setAttribute("userid", username);
    15.             if( !password.equals(tuser.getUserPwd().trim())){
    16.                 request.setAttribute("message", "请您输入正确用户名及密码!");
    17.                 return mapping.findForward("logout");
    18.             }        
    19.             Role roles[] = rdao.findWhereRoleCodeEquals(tuser.getUserrole());
    20.             Role role = null;
    21.             if(roles != null && roles.length > 0){
    22.                 role = roles[0];
    23.             }
    24.             request.getSession().setAttribute(Const.ROLE, role);            
    25.             request.getSession().setAttribute(Const.LOGIN_USER, tuser);
    26.         }catch(Exception ex){
    27.             ex.printStackTrace();
    28.             request.setAttribute("message", "请您输入正确用户名及密码!");
    29.             return mapping.findForward("logout");
    30.         }   
    31.         return mapping.findForward("success");
    32.     }
    复制代码
    有想法使用MockStrutsTestCase来测试,自己写了个MockUserLoginAction继承上面的UserLoginAction

    代码如下:


    1. public class MockUserLoginAction extends UserLoginAction{
    2.    
    3.     public ActionForward login(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception
    4.     {
    5.         String username = WebParamUtils.getParameter(request, "username", "");
    6.         String password = this.getParameter(request, "userpass", "");
    7.         System.out.println("username");
    8.         System.out.println("password");
    9.         if(username == null || username.length()== 0){
    10.             request.setAttribute("message", "请您输入正确用户名及密码!");
    11.             return mapping.findForward("logout");
    12.         }
    13.         if(username!="8000"||password!="123456")
    14.         {
    15.             request.setAttribute("message", "请您输入正确用户名及密码!");
    16.             return mapping.findForward("logout");
    17.         }
    18.         request.setAttribute("userid", username);
    19.         return mapping.findForward("success");
    20.     }
    21. }
    复制代码
    测试类代码如下:


    1. public void testLoginSuccess() throws Exception
    2. {
    3.     STCRequestProcessor.addMockAction("com.zzy.record.action.user.UserLoginAction","com.zzy.record.action.user.MockUserLoginAction");
    4.     setRequestPathInfo("/loginAction");
    5.     addRequestParameter("method","login");
    6.     addRequestParameter("username","8000");
    7.     addRequestParameter("userpass","123456");
    8.     actionPerform();
    9.     //verifyForward("success");
    10.     assertEquals("8000",this.getMockRequest().getAttribute("userid"));
    11.     }
    复制代码
    但运行出错
    错误信息如下:

    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


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


    [ 本帖最后由 fairylly 于 2009-2-12 10:06 编辑 ]
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 05:14 , Processed in 0.070556 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表