浅谈Junit测试中反射和Jmock的应用

  最近由于项目的需要,开发后的代码强制编写Junit测试,并且达到一定的coverage probility(主要应付客户).所以,为了达到一定的覆盖率,鄙人不得不在Case中大量使用反射(一般是针对private方法)和JMock(主要针对一些属性方法)。

  小编是做开发出身,由于对Spring的源代码有过或多或少的了解,因此对反射技术也有一定的了解。故在使用反射进行Junit测试的过程中,还算是没有遇到太多问题。小编认为,使用反射最重要的是要分清两点: 一是要反射的实现类(记住,这里的对象类型必须是具体的实现类,而非接口);二就是要通过反射调用的方法(一般这里指的是private方法),这里需要注意方法重构的情况;对于鄙人来说,最头疼的就剩下JMock方式了。

  其实说来惭愧,小编接触JMock还是在今年11月份,当时被发配到一个做纯后台的项目;当时就想JMock只是针对Junit测试的技术,对于我们开发人员来说没有什么太大的关系,不用过多的了解。感觉哥们不用JMock一样可以把Junit做好,一样可以把覆盖率提高;随着单元测试进行,我慢慢发现:有些方法如果不使用JMock花费的时间和精力要远远比使用JMock多的多,由于项目赶时间,公司没有过多的时间让我们花费在Junit test上,所以,鄙人感觉还是应该重申一下自己的立场,感觉还是应该对JMock了解一下,不光是加快现在的Junit测试的进度,还应该补充一下自己在Junit测试上的知识;

  (注: 以下内容都是笔者自己的理解,如果有哪些地方不妥当的,还望各位大侠给出建议,小编在此先谢谢啦!!!!)

  1. 首先就是创建MockContext,用来构造具体要被mock的方法对象。

  2. 通过step1创建的mockContext构造具体的mock对象。

  eg:mockContext.mock(Class,ObjectAgentName);

  其中mock方法中的参数,Class指的是要构造的mock对象的类型,这里只能是接口;ObjectAgentName指的是被mock对象的代理名称,这个参数不是必须的;如果没有这个参数,当前就会根据Class创建默认的代理名称;

  注意: 在MockContext中,代理名称唯一,也就是不能出现名称相同的两个mock对象。

  3. 通过mockContext.checking()方法把mock对象替代具体代码中的对象。

  eg:

  mockContext.checking(new Expectations() {

{

    // 1. 具体参数,当参数为"dandan"的时候,addressServcie对象的findAddresses方法用returnIterator返回一个Iterator<Address>对象。

allowing(addressServcie).findAddresses("dandan");

will(returnIterator(addresses));

    

    // 2. 参数类型,当参数为String类型的时候,addressServcie对象的findAddresses方法用returnIterator返回一个Iterator<Address>对象。

allowing(addressServcie).findAddresses(noNull(any(String.class)));

will(returnIterator(addresses));

    

    // 当参数为"dandan"的时候,addressServcie对象的findAddresses方法用returnIterator返回一个Iterator<Address>对象。

oneof(addressServcie).findAddresses("dandan");

will(returnIterator(addresses));

  

    // 在代码中多次执行被mock的方法对象的时候。

atList(1).of(addressServcie).findAddresses(noNull(any(String.class)));

will(returnIterator(addresses));

}

});

时间: 2024-10-14 20:24:35

浅谈Junit测试中反射和Jmock的应用的相关文章

浅谈C语言中的联合体(转载)

联合体union 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构: 2)它的所有成员相对于基地址的偏移量都为0: 3)此结构空间要大到足够容纳最"宽"的成员: 4)其对齐方式要适合其中所有的成员: 下面解释这四条描述: 由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的.为

2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎

今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率,但是我们可以通过边学边做的方式来实现其开发的.这不仅便于我们日后对系统的管理与维护,而且还给我们带来一个学习的动力与实践的地方. 但我们在创建一个基于MVC框架的项目时,就遇到一些问题了.那就是MVC的视图引擎是有两种的,一种是Razor,会以cshtml后缀的文件作为视图文件:另一种是ASPX,

浅谈探索性测试

今天学习时看了一篇谈探索性测试的文章.有一点感触. 探索性测试如果在测试策略层面应该和应变式的测试策略相符合. 暂且不谈探索性测试的方法以及那些利弊. 只是简单的打个比喻,反应一下我对探索性测试的认知. 农村的孩子以前都放农忙假,要求学生去拾麦穗(好像语文课本里还有相关内容,叫颗粒归仓). 探索性测试就像捡麦穗,刚割完的麦子,确实能捡到不少丢的麦穗. 但是都捡过一遍甚至几遍了,再去捡,就捡的少了. 我们平时做探索性测试的关键也在此,只做一遍. 探索这个词是最能反映人类智慧的词,很费脑细胞,不要把

【sql注入】浅谈sql注入中的Post注入

[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在感觉到难,现在,就让我们一起来谈谈,post注入是多么的轻松吧!PS:文中有写os-shell00x02测试站点:http://xxx.xxxxx.com/对于我来说,post注入无非有两种方法第一种利用burp抓包然后使用sqlmap -r 来进行检测注入第二种比较简单,直接使用sqlmap --

浅谈软件性能测试中关键指标的监控与分析

浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题. Ø  判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能. 而对于用户来说,则最关注的是当前系统: Ø  是否满足上线性能要求? Ø  系统极限承载如何? Ø  系统稳定性如何? 因此,针对以上性能测试的目的以及用户的关注点,要达到以上

浅谈Linux系统中的7种运行级别及其原理

浅谈Linux系统中的7种运行级别 Linux系统7个运行级别(runlevel): 运行级别0: 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动. 运行级别1: 单用户工作状态,root权限,用于系统维护,禁止远程登陆. 运行级别2: 多用户状态(没有NFS). 运行级别3: 完全的多用户状态(有NFS),登陆后进入控制台命令行模式. 运行级别4: 系统未使用,保留. 运行级别5: X11控制台,登陆后进入图形GUI模式. 运行级别6: 系统正常关闭并重启,默认运行级别不能设为6,

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制

转: 浅谈C/C++中的指针和数组(二)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址 规则2:下标总是与指针的偏移量

转:浅谈C/C++中的指针和数组(一)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 浅谈C/C++中的指针和数组(一) 指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别.造成这种原因可能跟现在大学教学以及现在市面上流行的很多C或者C++教程有关,这些教程虽然通俗易懂,但是在很多关键性的地方却避而不谈或者根本阐述不清楚,甚至很