第一次使用JUnit这个工具
我有一个函数,主要是 根据输入的日期 对数据库 进行检索,将结果显示在页面上请问大哥们,如何对这个函数进行UT?函数被调用如下
if(operation.saveAction(dateManageForm,request)){.....}函数如下
public boolean saveAction(F00009Form dateManageForm,
            HttpServletRequest request){
        
        //DB操作实例化
        DBCommon db = new DBCommon();
        
        //得到查询中得到的List值       
        List dataList = dateManageForm.getStrutsAction();
       
        //考试ID
        String testId = dateManageForm.getTestId();
        //学科ID
        String subjectId = dateManageForm.getSubjectId();
        //考试日期
        String testDate = dateManageForm.getTestDate();
        
        //考试区分
        String testDiff;
        
        //考试区分要进行相应处理
        if("one".equals(dateManageForm.getTestDiff()))
            testDiff="1";
        else
            testDiff="0";
        
        //实例化StrutsData
        StrutsData sd = new StrutsData();
        
        //初始化考试ID
        sd.setTestId(testId);
        //初始化学科ID
        sd.setSubjectId(subjectId);
        //初始化考试日期
        sd.setTestDate(testDate);
        //初始化考试区分
        sd.setTestDiff(testDiff);
        
        //实例化StringBuffer
        StringBuffer sb = new StringBuffer();
        
        //SQL语句
        sb.append( "INSERT INTO testschedule" );
        sb.append( "("                        );
        sb.append(    "test_id"               );
        sb.append(    ","                     );
        sb.append(    "subject_id"            );
        sb.append(    ","                     );
        sb.append(    "test_date"             );
        sb.append(    ","                     );
        sb.append(    "test_division"         );
        sb.append( ")"                        );
        sb.append( "VALUES"                   );
        sb.append( "("                        );
        sb.append(    "'"                     );
        sb.append(testId);
        sb.append(    "'"                     );
        sb.append( ","                        );
        sb.append(    "'"                     );
        sb.append(subjectId);
        sb.append(    "'"                     );
        sb.append( ","                        );
        sb.append(    "'"                     );
        sb.append(testDate);
        sb.append(    "'"                     );
        sb.append( ","                        );
        sb.append(    "'"                     );
        sb.append(testDiff);
        sb.append(    "'"                     );
        sb.append( ")"                        );
                    //数据库连接
        Connection conn=null;
        if (!dateManageForm.getIsJunit()) {
            conn = db.openConnection();
        } else {
            conn = db.junitOpenConnection();
        }
        
        Statement st = null;
        try{
            st = conn.createStatement();
            
            //执行数据库操作
            st.executeUpdate(sb.toString());
            db.commit();
            
            //往Session加入数值,页面显示操作结果
            HttpSession session = request.getSession();
            session.setAttribute("DBMessage", "保存成功");
        }
        catch(Exception ex){             //退回防止数据被死锁
            db.rollback();
            
            //在日志中设置错误信息
            LogConst.setErrorMsg(this.getClass().getName(),ex.getMessage());
            
            //往Session加入数值,页面显示操作结果
            HttpSession session = request.getSession();
            session.setAttribute("DBMessage", "保存失败");
            
            //返回错误,跳转
            return false;
        }
        finally{            
            try {
                st.close();
                conn.close();
            } catch (SQLException e) {
                //在日志中设置错误信息
                LogConst.setErrorMsg(this.getClass().getName(),e.getMessage());
                e.printStackTrace();
                
                return false;
            }
        }
        //往List中添加插入的数值
        //dataList.add(sd);
        
        //设置Form中添加List,这样就可以保存到Session
        //dateManageForm.setStrutsAction(dataList);
                
        return true;
    }

解决方案 »

  1.   


    在JDK1.4中,测试类继承自TestCase,把你的上面的代码放到测试类中,该测试类方法名是test开头的。
      

  2.   

    能给我演示一点测试代码么?
    随便说下,我是struts,继承MockStrutsTestCase
      

  3.   

    可以用assertEquals()方法验证你期望的值与你得到的值进行比较
    例如:
    assertEquals("1", String.valueOf(getRequest().getAttribute("subject_id")));
    其中的“1”是你期望的值  后面就是在request里面取得的值
      

  4.   

    我现在遇到一个问题就是::
    如果我测试的数据是故意错误的,该数据在页面上就已经被javascript验证掉了,这种数据是否要放到UT中去测试?如果要的话,怎么测??
      

  5.   

    javascript验证数据不通过的话,还会提交吗?提交的话,在测试类里定义一个方法,在方法里定义一个你要测试的类的对象,把你的数据当参数传给这个对象要测试的方法,一般一组数据只测试一个分枝吧,没具体做过,但看别人做了,不知道是不是这样的.
      

  6.   

    我的意思是说,一般情况下javascript验证不通过的话,不会向后台提交吧.或者你的意思是故意用错误数据来做测试,那是不是应该放到程序里边做数据呢,我不是做测试的,但是感觉这部分的测试应该是指后台程序的测试.还是找找专业人士问问吧
      

  7.   

    我现在遇到一个问题就是::
    如果我测试的数据是故意错误的,该数据在页面上就已经被javascript验证掉了,这种数据是否要放到UT中去测试?如果要的话,怎么测??如果可以确定一定不会有上述的错误数据提交到后台,那么可以不进行测试。
      

  8.   

    如果可以的话 最好测试。万一客户端JavaScript被禁用了呢!!!