当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

操作easymock测试jdbc解析[Java编程]

赞助商链接



  本文“操作easymock测试jdbc解析[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

固然从前用easymock测试过Dao,但那些Dao的实现,要末就hibernate,要末就用spring,而这两个框架的履行精确与否我们是不用关心的.JDBC是不是也这样测试了.答案是必定的.
这几天要用存储历程跟jdbc来做个项目,想想也有好长一段时间没用过JDBC来做项目了.该复习复习了.
前阵子学了easymock,真好目前可以派上用场了.不过在测试的历程中还是碰到了不小问题,想来是自己底子不好的来由. 这次不TDD了,太麻烦了.
先看看我们要测试的代码

java代码

CallableStatementcstmt = null;
try {
cstmt = _conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
cstmt.setString(1, "1");
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);

cstmt.executeUpdate();
return cstmt.getString(2);

} catch (Exception e) {
GxDebug.logException(e);
e.printStackTrace();
return null;
} finally {
if (cstmt != null)
try {
cstmt.close();
} catch (Exception e) {
}
}
代码还挺长的.从上面的代码我们知道我们必须mock两个对象进去.一个是Connection, 一个是CallableStatementcstmt .
好再看看我们的测试代码

java 代码
conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
conControl.setReturnValue(cstmt);
conControl.replay();

cstmt.setString(1, "1");
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
cstmt.executeUpdate();
cstmtControl.setReturnValue(1);
cstmt.getString(2);
cstmtControl.setReturnValue("5,4,3");
cstmt.close();
cstmtControl.replay();

String rusult = dao.getNumber();
Assert.assertEquals("5,4,3", rusult);

conControl.verify();
cstmtControl.verify();

oh,my got!测试代码比实现代码还要多.这段代码能履行吗?
我想可以的.easymock的原理是记录-回放的情势.
我想要做的工作是:
1,记录你mock对象的工作记录,比方上面的代码我们mock对象的工作记录是:

java 代码
conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
conControl.setReturnValue(cstmt);
cstmt.setString(1, "1");
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
cstmt.executeUpdate();
cstmtControl.setReturnValue(1);
cstmt.getString(2);
cstmtControl.setReturnValue("5,4,3");
cstmt.close();

假如你工作记录的代码要求有返回值的话,那么你必须供应一个自定义的值给它,不然会报错.比方上面的

cstmt.getString(2);
cstmtControl.setReturnValue("5,4,3"); //自己定义的返回值,用作今后的对比.
上面的是记录操作,回放的时刻,easymock会把记录的操作跟你实际的代码举行对比,假如里面出了什么不对,那么不好意思你的代码有问题,请改正后再测试.

假若有爱好可以自己试下.

比方假如您
conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
改正成
conn.prepareCall("{call LUCK_LOAD_COMMON(?,?,?)}");
则呈现的非常是:
junit.framework.AssertionFailedError:
Unexpected method call prepareCall("{call LUCK_LOAD_COMMON(?,?)}"):
prepareCall("{call LUCK_LOAD_COMMON(?,?)}"): expected: 0, actual: 1
prepareCall("{call LUCK_LOAD_COMMON(?,?,?)}"): expected: 1, actual: 0


  以上是“操作easymock测试jdbc解析[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 操作easymock测试jdbc解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .