注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

学习Mockito - Argument Matcher(参数匹配器)  

2012-06-13 11:28:35|  分类: 测试 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Mockito通过equals()方法,来对方法参数进行验证。但有时我们需要更加灵活的参数需求,比如,匹配任何的String类型的参数等等。参数匹配器就是一个能够满足这些需求的工具。

Mockito框架中的Matchers类内建了很多参数匹配器,而我们常用的Mockito对象便是继承自Matchers。这些内建的参数匹配器如,anyInt()匹配任何int类型参数,anyString()匹配任何字符串,anySet()匹配任何Set等。下面通过例子来说明如何使用内建的参数匹配器:

 

@Test
public void argumentMatchersTest(){
    List<String> mock = mock(List.class);
    when(mock.get(anyInt())).thenReturn("Hello").thenReturn("World");
    String result=mock.get(100)+" "+mock.get(200);
    verify(mock,times(2)).get(anyInt());
    assertEquals("Hello World",result);
}

Stubbing时使用内建参数匹配器 
例子中,首先mock了List接口,然后用迭代的方式模拟了get方法的返回值,这里用了anyInt()参数匹配器来匹配任何的int类型的参数。所以当第一次调用get方法时输入任意参数为100方法返回”Hello”,第二次调用时输入任意参数200返回值”World”。
Verfiy时使用参数匹配器
最后进行verfiy验证的时候也可将参数指定为anyInt()匹配器,那么它将不关心调用时输入的参数的具体参数值。

注意事项
如果使用了参数匹配器,那么所有的参数需要由匹配器来提供,否则将会报错。假如我们使用参数匹配器stubbing了mock对象的方法,那么在verify的时候也需要使用它。如:

@Test
public void argumentMatchersTest(){
    Map mapMock = mock(Map.class);
    when(mapMock.put(anyInt(), anyString())).thenReturn("world");
    mapMock.put(1, "hello");
    verify(mapMock).put(anyInt(), eq("hello"));
}

 
在最后的验证时如果只输入字符串”hello”是会报错的,必须使用Matchers类内建的eq方法。如果将anyInt()换成1进行验证也需要用eq(1)。 

详细的内建参数匹配器请参考:
http://docs.mockito.googlecode.com/hg/org/mockito/Matchers.html


  评论这张
 
阅读(1573)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016