Sky's blog

我和我追逐的梦

常用链接

统计

其他链接

友情链接

最新评论

easymock教程-class mocking

    前面的例子中,mock的对象都是基于interface,虽然说我们总是强调要面对接口编程,而不要面对实现,但是实际开发中不提取interface而直接使用class的场景非常之多。尤其是一些当前只有一个明确实现而看不到未来扩展的类,是否应该提取interface或者说是否应该现在就提取interface,总是存在争论。

    这种情况下,我们就会面临主要测试对象依赖到一个具体类而不是interface的情况,easymock中通过class extension 来提供对class mocking的支持。

1. class mocking的使用

    easymock class extension的使用方式和普通的interface mock完全一致,基本上easymock中有的功能easymock class extension都同样提供,而且所有的类名和方法名都保持一致。

     ClassA impl = Easymock.createMock(ClassA.class);
            Easymock.expect(impl.getById("1001")).andReturn(...);
            Easymock.replay(impl);
   
    唯一的差异在于,easymock class extension的java package和easymock不同,easymock是org.easymock.*, 而 easymock class extension是org.easymock.classextension.*,典型如 org.easymock.classextension.Easymock 对应 org.easymock.Easymock。另外在发布时,两者是分开发布的,easymock.jar 和 easymockclassextension.jar,需要根据需要分别导入,或者必要时同时导入。

2. 3.0新版本和向后兼容

    我们来回顾一下easymock的历史版本: easymock 1.* 非常久远了,已经没有人在用。2.0版本在2005-12-24发布,基于jdk1.5,之后陆续发布的2.1/2.2/2.3/2.4/2.5等几个版本中,都提供了对应版本的easymock class extension。easymock 3.0 版本是最新版本,2010-05-08 发布,主要改进就是将easymock class extension的功能合并到easymock中,以后只要使用easymock就可以提供class mocking的功能。当然为了兼容2.*下的旧代码,依然提供了EasyMock 3.0 Class Extension代理到easymock 3.0。

    3.0版本之后,easymock class extension的class mocking功能已经无缝集成到easymock中,因此代码的编写简洁了很多,强烈建议新用户直接使用3.0版本。对于使用2.*版本的旧有代码,easymock提供了easymock class extension的3.0版本,兼容2.*的代码,底层实现实际是代理给easymock3.0。因此2.*版本easymock class extension的用户可以通过简单的升级easymock class extension到3.0即可平滑升级,之后再逐渐替换掉easymock class extension的代码。

3. class mocking的限制

    class mocking是有一些限制的,

    1) 不能mock类的 final方法

 如果final方法被调用,则只能执行原有的正常代码。

    2) 不能mock类的static 方法。

        同样如果private方法被调用,只能执行原有的正常代码。


    3) 不能mock类的一些特殊方法: equals(), toString()和hashCode().

 原因是easymock在实现是为每个class mock对象提供了内建的以上三个方法。需要强调的是,对于基于interface的mock,这个限制也是同样存在的,即使以上三个方式是interface定义的一部分。


    在使用时需要避开这种场景,或者组合使用其他的mock 框架比如jmockit来mock private方法和final方法。

 

 

 

 

 

 

 

 

 

 

 

posted on 2010-10-26 16:54 sky ao 阅读(2002) 评论(0)  编辑  收藏 所属分类: software test


只有注册用户登录后才能发表评论。


网站导航: