- 浏览: 584523 次
- 性别:
- 来自: 广州
最新评论
-
sp42:
好搞笑
你懂不懂xml! (2) -
cherishmmo2004:
感觉你们都很牛掰,我们做的一个运维平台也是用karaf的,用k ...
基于osgi开发大型的企业应用 -
liubey:
“自作聪明”的使用了读写锁,其实只使用ReentrantLoc ...
编码最佳实践(4)--小心LinkedHashMap的get()方法 -
liubey:
你这个代码是sublist后仍然一直持有这个sub的引用,一般 ...
编码最佳实践(5)--小心!这只是冰山一角 -
xiegqooo:
初学maven(5)-使用assembly plugin实现自定义打包
文章列表
在酒店里上网,无聊又来到je,sorry,我还是习惯这么称呼,不习惯用ie。
上一次来北京,是去年12月底,参加javaOne Beijing 2010。实话说非常的失望,回去之后告诉boss,以后的javaOne可以不用继续参加了。
这次,时隔数月,再次被派出来参加qcon,依然还是北京,坐在这个京仪大酒店里面,依稀和上次参加javaOne呆坐在马可波罗很是类似。当然,这次天气很好,连毛衣都不用穿就可以在户外闲逛,春天就是好啊。
回到正题,刚刚看了一下qcon的日程,感觉上这次qcon的内容还是蛮充实的,不想上次javaOne那么水。没有明显的纯广告和官腔 ...
新安装了ubuntu10.10版本在公司笔记本上,结果在系统启动方面遭遇很多问题。记录下来以备用。
背景:公司笔记本,安装有vista,必须保留。因此只能考虑vista + ubuntu的双系统。由于vista所在分区是有pointsec软件作硬盘 ...
上周参加北京的javaOne,今天回到办公室,刚刚在msn上和YHC同学交流了一下对这次javaOne的看法。
我个人对java未来颇有些担忧,尤其在这次javaOne之后。和YHC同学交流后感觉应该不是我一个人有类似的想法,好吧,在征得YHC同学的同意后,我将这段聊天内容贴出来。
有兴趣的同学,一起来聊聊吧。
---------- 以下为具体的聊天内容 -----------------
小剑 说:
是啊,上周去的,冻的够呛
yhc 说:
刚好是最冷的时候
还好房间里面都有暖气,不过外面就很厉害了
小剑 说:
是啊,运气差了点。帖子你应该看过了,这次j ...
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了。easymock为此提供了IArgumentMatcher 接口来让我们实现自定义的参数匹配器。
我们还是用例子来说话:
public interface Service { public void execute(Request request); }
service类的execute()方法接收一个Request实例作为参数, Request是一个ja ...
在easymock中,对于mock对象的同一个方法,可以为每一次的调用定制不同的行为。在record阶段easymock会精确的记录我们录入的行为,基于每一次的方法调用。
这里有一个官网文档中的例子:
expect(mock.voteForRemoval("Document")) .andReturn((byte) 42).times(3) .andThrow(new RuntimeException()).times(4) .andReturn((byte) -42);
对于moc ...
前面的教程中,我们看到easymock可以通过expect方法来设定mock方法的返回值或者异常,但是注意这些案例中设置的返回值都是在调用被测试的类的方法前就已经确定下来的,即我们其实在测试类的代码运行前(实际是在EasyMock.replay()方法调用前)就已经"预知"了返回结果。
但是在某些情况下,我们可能无法预知返回值,比如我们需要根据输入的参数值来决定返回什么,而这个参数可能无法在record阶段获得。因此在mock方法中我们无法在record阶段就决定应该返回什么。
对于这种场景,easymock提供了IAnswer ...
easymock中提供对于类的mock功能,我们可以方便的mock这个类的某些方法,指定预期的行为以便测试这个类的调用者。这种场景下被mock的类在测试案例中扮演的是次要测试对象或者说依赖的角色,主要测试对象是这个mock类的调用者。但是有时候我们需要将这个测试类作为主要测试对象,我们希望这个类中的部分(通常是大部分)方法保持原有的正常行为,只有个别方法被我们mock掉以便测试。
1. 使用方法
我们先来看看这个partial class mocking 是如何工作的:
public class Service { public
easymock中提供了非常多的方法来实现参数匹配,基本能满足一般参数匹配的要求。
我们来具体看一下到底有哪些方法:
(1) 基于基本类型的比较
1. eq(X value)方法, X 可以是boolean,byte,char, double,float,int,long,short,T
有多个重载方法,支持基本类型如boolean, byte,char, double,float,int, long,short,后面会介绍它也支持Object比较。
这个eq()方法的用法直接了当,基本数值直接 ...
在创建mock对象的时候,我们可以命名mock对象。
前面我们谈到easymock中有三种mock对象,分别用下面三个方法创建:
createMock(Class<T> toMock)createStrictMock(Class<T> toMock)createNiceMock(Class<T> toMock)
带有命名功能的方法也有对应的三种:
createMock(String name, Class<T> toMock)
对于mock对象上的mock方法的调用,easymock支持指定次数,默认为1,例如
Easymock.expect(mock.method1()).andReturn(...);
这里没有显式的指定调用次数,因此效果等同于
Easymock.expect(mock.method1()).andReturn(...).once();
同时easymock提供了其他的方法,用于指定具体调用次数或者放宽调用次数检验。
1. once()
如果明确调用次数为1,则可以使用这个方法显式指定,也可以省略,easy ...
easymock并不是万能的,在使用easymock时有一些限制需要注意。
(1) Object方法的限制
我们都知道java是一个单根继承体系,Object是所有类的基类。在Object类上有几个基本的方法,easymock是不能改变其行为的:equals(), hashCode()和toString()。
即对于easymock创建的mock对象,其equals(), hashCode()和toString()三个方法的行为时已经固定了点,不能通过Easymock.expect()来指定这三个方法的行为,即使这三个方法是接口定义的一部分。
...
前面教程中有个章节讨论到mock和stub的概念差别,一般来说easymock如其名所示,主要是用来做mock用的,但是easymock中也提供有对stub的支持, 主要体现在andStubAnswer(),andStubDelegateTo(),andStubReturn(),andStubThrow()和asStub()等方法的使用上。
我们来看一个实际使用的例子:
public class Business { private Service service; private StubService stu ...
大家都知道sonar是个好东东,在有CI支持的情况下,使用好了可以非常好的控制代码的质量,诸如代码覆盖率,代码规则检查等。
而解决violation的办法,除了正统的修改代码来满足规则外,还有一个变通的方法, NOSONAR。这个标记本意是在一些特殊情况,有不得已的理由不得不违反规则,为了避免sonar继续报错而不得已做了一个"变通"。
NOSONAR本意虽好,但要是有人滥用,变通就会变成取巧,因为解决sonar violation的最简单的方法,就是直接NOSONAR!
当问题很简单时,一般人都会选择正常的方式修改代码,如果只是举手之劳 ...
在easymock的使用过程中,当创建mock对象时,我们会遇到 strict mock和nice mock的概念。
比如创建mock对象我们通常使用EasyMock.createMock(),但是我们会发现easymock同时提供了两个类似的方法:
EasyMock.createNiceMock() EasyMock.createStrictMock()
类似的在创建MocksControl时,除了通常的EasyMock.createControl() 外,easymock也同时提供两个类似的方法:
EasyMock.createNiceC ...
在easymock中,通常我们使用一下的代码来创建mock对象
IMyInterface mock = createStrictMock(IMyInterface.class); replay(mock); verify(mock); reset(mock);
如果需要mock多个对象,则需要如此:
IMyInterface1 mock1 = createStrictMock(IMyInterface1.class); IMyInterface2 mock2 = createStrictMock(IMyInterfac ...