读书人

50分!请单体测试(JUnit)高手帮小弟我

发布时间: 2011-11-24 23:11:24 作者: rapoo

50分!请单体测试(JUnit)高手帮我解惑!
第一次使用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;
}

[解决办法]

在JDK1.4中,

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

[解决办法]
可以用assertEquals()方法验证你期望的值与你得到的值进行比较
例如:
assertEquals( "1 ", String.valueOf(getRequest().getAttribute( "subject_id ")));
其中的“1”是你期望的值 后面就是在request里面取得的值
[解决办法]
关注
[解决办法]
javascript验证数据不通过的话,还会提交吗?提交的话,在测试类里定义一个方法,在方法里定义一个你要测试的类的对象,把你的数据当参数传给这个对象要测试的方法,一般一组数据只测试一个分枝吧,没具体做过,但看别人做了,不知道是不是这样的.
[解决办法]
我的意思是说,一般情况下javascript验证不通过的话,不会向后台提交吧.或者你的意思是故意用错误数据来做测试,那是不是应该放到程序里边做数据呢,我不是做测试的,但是感觉这部分的测试应该是指后台程序的测试.还是找找专业人士问问吧

读书人网 >Java Web开发

热点推荐