利用easymock测试jdbc分析

虽然以前用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

时间: 2024-08-30 06:36:27

利用easymock测试jdbc分析的相关文章

visual studio-Visual Studio Web负载测试,测试摘要分析

问题描述 Visual Studio Web负载测试,测试摘要分析 测试为简单login页面测试,10并发持续10分钟 我用同种方式测过外网址,数据很漂亮,错误只有45个Timeout,Avg.Page Time在0.6,浮动也不大,请大神明示以下问题: 失败测试数(比例):81465(58.1) 1.如此高的失败率说明什么?开发web"> 2.错误栏里有1000次的403错误意味什么?(图中显示为同时出现) 3.页面在请求时调用本地cookie会加速页面展示,但为什么会有0.039s的A

apache性能-Apache ab并发测试结果分析,牛人帮忙看看有啥问题,目前多人操作的时候非常慢

问题描述 Apache ab并发测试结果分析,牛人帮忙看看有啥问题,目前多人操作的时候非常慢 以下是一台阿里云机器,跑的测试结果,有知道这样的结果能反映什么问题吗? 目前小弟遇到一个性能问题,单人操作的时候速度还行,但是20 人左右同时操作的时候,就感觉很慢了. [root@AY1311281530504461fdZ bin]# ./ab -n 1000 -c 700 localhost/test.jsp This is ApacheBench, Version 2.3 <$Revision:

对PHP采集数据提取核心函数的速度的测试与分析

对PHP采集数据提取核心函数的速度的测试与分析由于程序需要,于是对PHP采集中的字符提取的核心部分进行了执行速度的测试.测试了三种最常见的提取办法:方法一:<?phprequire "class.debug.php";function getContent ( $sourceStr ){$content = strstr( $sourceStr, '形' );$content = substr( $content, 0, strrpos( $content, '言' ) + st

IDC假负载验证测试问题分析

关于IDC假负载验证测试,"腾讯数据中心"已经发送2篇介绍文章<数据中心假负载验证测试之道>.<数据中心假负载验证测试实战指导方案>,今天我们将以某大型微模块数据中心(简称A-IDC)的假负载验证测试为例,继续为大家剖析假负载验证测试情况. 一.假负载验证测试问题概述 A-IDC假负载验证测试主要由基础设施验证测试和微模块验证测试组成.该项目验证测试累积发现基础设施问题280项,微模块测试问题381项.测试发现的问题主要分为4类:设计问题.设备选型问题.设备质量

谈谈怎么利用服务器日志来分析我们页面为什么不被收录

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 很多人都在说原创,每天去采集,然后修改后,重新发到自己的网站上,但是不知道你木有想过一个问题,我们发的文章有没有意义,为什么不被收录,蜘蛛怎么去认为我们发的文章有没有意义. 在这之前,我们得知道服务器日志在哪里寻找,服务器日志一般存在于FTP空间一个Log的文件夹下,并且是tor后缀结尾.将他下载后,解压后我们得到俩个文件,将有大小文件后缀名

LoadRunner压力测试结果分析探讨

分析原则: 1. 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点) 2. 查找瓶颈时按以下顺序,由易到难. 服务器硬件瓶颈 网络瓶颈(对局域网,可以不考虑) 服务器操作系统瓶颈(参数配置) 中间件瓶颈(参数配置,数据库,web服务器等) 应用瓶颈(SQL语句.数据库设计.业务逻辑.算法等) 分析的信息来源: 1. 根据场景运行过程中的错误提示信息 2. 根据测试结果收集到的监控指标数据 一.错误提示分析 分析实例: 1.Error: Failed to connect

调试技巧 —— 如何利用windbg + dump + map分析程序异常

之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~ 所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0, 下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下: MiniDump.h   [cpp] view plaincopyprint?   #include <windows.h>   #include <tlhelp32.h>      //#include &

利用ping测试你的网页速度

    当你访问一个站点时,你可能需要很长时间,这也许是网络故障,你可以利用Ping程序来测试.Ping程序是一个网络小程序,它会向Web网址的主服务器发送一个32字节的消息.然后,它将服务器的响应时间记录下来.如果从发出信息到服务器相应的时间超过400毫秒,就可以认为Web网址运行缓慢.当然,你离Internet中心集线器越远,服务器的响应时间就越长.例如,如果你在澳大利亚,Ping的响应时间通常会高于400毫秒. Windows95/98/2000上按如下步骤使用Ping来测试: 1.在Wi

利用大数据和分析来发展业务,您准备好了吗?

许多企业已经发现,他们的内部数据访问和整合系统面临基于云的信息和大数据所带来的新挑战.如今的企业通常使用多个数据管理平台来完成内部分析和运营工作.由于平台增加和数据分散在不同的地理位置,许多企业发现数据虚拟化对其成功至关重要.数据虚拟化使企业能够提供远程数据访问,避免以物理方式转移数据,从而助力他们打造更加灵活敏捷的 IT 基础架构,节省时间和资金,改进复杂数据环境的管理.   广泛使用的标准数据管理方法,通常也被称为"提取.传输和加载"(ETL)流程. 数 据整合是拥有多平台的企业所