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验证不通过的话,不会向后台提交吧.或者你的意思是故意用错误数据来做测试,那是不是应该放到程序里边做数据呢,我不是做测试的,但是感觉这部分的测试应该是指后台程序的测试.还是找找专业人士问问吧