zoukankan      html  css  js  c++  java
  • 窥探EasyMock(2)进阶使用篇

    from:http://www.iteye.com/topic/310313

    1. 生成 Mock 对象

        如何创建一个需要严格遵守调用顺序的mock对象?

    Java代码  收藏代码
    1. SomeInterface mockObj = createStrictMock(SomeInterface.class);  

        如果你不想对每一个方法设定预期行为,对于这些非预期的方法调用你不想让EasyMock抛出AssertionError,你可以创建一个“nice”的mock对象,所有没有设定预期行为的方法会悄悄地返回一些空值(0, null或者false)。

    Java代码  收藏代码
    1. SomeInterface mockObj = createNiceMock(SomeInterface.class);  

        当然,如果你使用MockControl来创建Mock对象,都有相应的方法:createStrictControl和createNiceControl。(其实当你调用createMock等方法时,都生成了一个相应的control。)

    2. 开关调用顺序检查

        如果在测试某处你想关闭strict模式,使用:

    Java代码  收藏代码
    1. checkOrder(mockObj, false);  

        当然,如果想重新开启,可以使用

    Java代码  收藏代码
    1. checkOrder(mockObj, true);  

    3. 设定预期行为和输出

        期望一个方法始终返回期望的值,而不管调用次数:

    Java代码  收藏代码
    1. expect(mockObj.someAction(1)).andStubReturn("one");  

        下面的方法与此等价:

    Java代码  收藏代码
    1. expect(mockObj.someAction(1)).andReturn("one").anyTimes();  

        设定确定的调用次数:

    Java代码  收藏代码
    1. expect(mockObj.someAction(1)).andReturn("one").times(3);  

        设定调用次数在某个范围内:

    Java代码  收藏代码
    1. expect(mockObj.someAction(1)).andReturn("one").times(3, 5);  

        期望抛出异常:

    Java代码  收藏代码
    1. expect(mockObj.someAction(1)).andThrow(someException);  

    4. 参数匹配

        任意参数:

    Java代码  收藏代码
    1. expect(mockObj.someAction(anyInt())).andStubReturn("one");  

        当然,相应的有anyObject(), anyChar()等等。

        在参数上应用逻辑操作:

    Java代码  收藏代码
    1. expect(mockStatement.executeQuery(and(startsWith("select"), endsWith("order;")))).andReturn(mockResultSet);  

        EasyMock提供大量其它的逻辑操作。

        自定义参数匹配器:

    Java代码  收藏代码
    1. expect(mockStatement.executeQuery(SQLEquals("SELECT * FROM ORDER;"))).andReturn(mockResultSet);  
    Java代码  收藏代码
    1. private static String SQLEquals(String in) {  
    2.         reportMatcher(new SQLEquals(in));  
    3.         return in;  
    4.     }  
    5.   
    6.     private static class SQLEquals implements IArgumentMatcher {  
    7.   
    8.         private String expectedSql;  
    9.   
    10.         public SQLEquals(String expectedSql) {  
    11.             this.expectedSql = expectedSql;  
    12.         }  
    13.   
    14.         public boolean matches(Object actualSql) {  
    15.             if (actualSql == null && expectedSql == null)  
    16.                 return true;  
    17.             if (actualSql.getClass() == String.class)  
    18.                 return expectedSql.equalsIgnoreCase((String) actualSql);  
    19.             return false;  
    20.         }  
    21.   
    22.          // others omited.  
    23.     }  

    5. 没有结束

        EasyMock还提供了太多其他的功能,大家还是查API吧。

  • 相关阅读:
    Vue源码学习之双向绑定
    Vue源码学习之数据初始化
    JavaScript跨域资源请求(CORS)解决方案
    Vue学习笔记
    MongoDB学习笔记
    实现一个类似bootstrap的多级下拉菜单
    bootstrap栅格系统的实现
    滑动效果的标签页切换
    一个简单的类似Vue的双向绑定
    元素垂直居中的常见方法
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3833196.html
Copyright © 2011-2022 走看看