51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2193|回复: 0
打印 上一主题 下一主题

[原创] easymock教程-使用MockControl

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-26 16:52:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在easymock中,通常我们使用一下的代码来创建mock对象
  1. IMyInterface mock = createStrictMock(IMyInterface.class);
  2.     replay(mock);
  3.     verify(mock);
  4.     reset(mock);
复制代码
如果需要mock多个对象,则需要如此:
  1. IMyInterface1 mock1 = createStrictMock(IMyInterface1.class);
  2.     IMyInterface2 mock2 = createStrictMock(IMyInterface2.class);
  3.     IMyInterface3 mock3 = createStrictMock(IMyInterface2.class);
  4.     ...
  5.     replay(mock1, mock2, mock3, ...);
  6.     verify(mock1, mock2, mock3, ...);
  7.     reset(mock1, mock2, mock3, ...);
复制代码

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


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

  1. IMocksControl mocksControl = createControl();
  2.     IMyInterface1 mock1 = mocksControl.createMock(IMyInterface1.class);
  3.     IMyInterface2 mock2 = mocksControl.createMock(IMyInterface2.class);
  4.     IMyInterface3 mock3 = mocksControl.createMock(IMyInterface3.class);
  5.     ...
  6.     mocksControl.replay();
  7.     mocksControl.verify();
  8.     mocksControl.reset();
复制代码

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

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

  1. public static <T> T createMock(final Class<T> toMock) {
  2.         return createControl().createMock(toMock);
  3.     }

  4.     public static IMocksControl createControl() {
  5.         return new MocksControl(MocksControl.MockType.DEFAULT);
  6.     }
复制代码

除了使用方便外,使用IMocksControl还有另外一个重要的好处,就是如果使用strict control,则可以跨多个mock对象检测方法的调用顺序


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-25 15:19 , Processed in 0.060743 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表