首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

easymock课程-使用MockControl

2012-07-15 
easymock教程-使用MockControl???? 在easymock中,通常我们使用一下的代码来创建mock对象????IMyInterface?

easymock教程-使用MockControl

???? 在easymock中,通常我们使用一下的代码来创建mock对象

easymock课程-使用MockControl????IMyInterface?mock?=?createStrictMock(IMyInterface.class);
easymock课程-使用MockControl????replay(mock);
easymock课程-使用MockControl????verify(mock);?
easymock课程-使用MockControl????reset(mock);

??? 如果需要mock多个对象,则需要如此:

easymock课程-使用MockControl????IMyInterface1?mock1?=?createStrictMock(IMyInterface1.class);
easymock课程-使用MockControl????IMyInterface2?mock2?=?createStrictMock(IMyInterface2.class);
easymock课程-使用MockControl????IMyInterface3?mock3?=?createStrictMock(IMyInterface2.class);
easymock课程-使用MockControl????...
easymock课程-使用MockControl????replay(mock1,?mock2,?mock3,?...);
easymock课程-使用MockControl????verify(mock1,?mock2,?mock3,?...);?
easymock课程-使用MockControl????reset(mock1,?mock2,?mock3,?...);easymock课程-使用MockControl

??? 不仅需要为每个mock对象增加create语句,而且需要为这个新增的mock对象更新replay()/verify()/reset()方法,比较啰嗦,而且容易出错。

?

??? 这种情况下可以考虑使用MocksControl来简化代码:

easymock课程-使用MockControl????IMocksControl?mocksControl?=?createControl();
easymock课程-使用MockControl????IMyInterface1?mock1?=?mocksControl.createMock(IMyInterface1.class);
easymock课程-使用MockControl????IMyInterface2?mock2?=?mocksControl.createMock(IMyInterface2.class);
easymock课程-使用MockControl????IMyInterface3?mock3?=?mocksControl.createMock(IMyInterface3.class);
easymock课程-使用MockControl????...
easymock课程-使用MockControl????mocksControl.replay();
easymock课程-使用MockControl????mocksControl.verify();?
easymock课程-使用MockControl????mocksControl.reset();


??? IMocksControl接口容许创建多个mock对象,这些创建的对象自动关联到这个mocksControl实例上,以后再调用replay()/verify()/reset()时就不需要逐个列举出每个mock对象。当mock对象比较多,尤其是原有代码上新增mock 对象时非常方便。

??? 事实上,Easymock.createMock()方法内部实现也是使用IMocksControl的:

easymock课程-使用MockControleasymock课程-使用MockControl????public?static?<T>?T?createMock(final?Class<T>?toMock)?{
easymock课程-使用MockControl????????return?createControl().createMock(toMock);
easymock课程-使用MockControl????}
easymock课程-使用MockControl
easymock课程-使用MockControleasymock课程-使用MockControl????public?static?IMocksControl?createControl()?{
easymock课程-使用MockControl????????return?new?MocksControl(MocksControl.MockType.DEFAULT);
easymock课程-使用MockControl????}

?

???? 除了使用方便外,使用IMocksControl还有另外一个重要的好处,就是如果使用strict control,则可以跨多个mock对象检测方法的调用顺序,具体的内容请参考本教程中的"strict和nice"一文。

?

热点排行