easymock教程-使用MockControl

本文介绍了一种在Easymock中简化多个mock对象创建、重播、验证及重置的方法,通过使用IMocksControl接口,使得代码更加简洁且易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 转:http://skydream.iteye.com/blog/829335



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

    IMyInterface mock = createStrictMock(IMyInterface. class);
    replay(mock);
    verify(mock); 
    reset(mock);

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

    IMyInterface1 mock1 = createStrictMock(IMyInterface1. class);
    IMyInterface2 mock2 = createStrictMock(IMyInterface2. class);
    IMyInterface3 mock3 = createStrictMock(IMyInterface2. class);
    ...
    replay(mock1, mock2, mock3, ...);
    verify(mock1, mock2, mock3, ...); 
    reset(mock1, mock2, mock3, ...);

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

 

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

    IMocksControl mocksControl = createControl();
    IMyInterface1 mock1 = mocksControl.createMock(IMyInterface1. class);
    IMyInterface2 mock2 = mocksControl.createMock(IMyInterface2. class);
    IMyInterface3 mock3 = mocksControl.createMock(IMyInterface3. class);
    ...
    mocksControl.replay();
    mocksControl.verify(); 
    mocksControl.reset();


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

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

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

     public  static IMocksControl createControl() {
         return  new MocksControl(MocksControl.MockType.DEFAULT);
    }

 

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值