mockito-ArgumentMatcher
2016-05-15 15:11
295 查看
from:http://hotdog.iteye.com/blog/911584
Mockito参数匹配器的实现使用了Hamcrest框架(一个书写匹配器对象时允许直接定义匹配规则的框架,网址:http://code.google.com/p/hamcrest/)。它已经提供了许多规则供我们使用, Mockito在此基础上也内建了很规则。但有时我们还是需要更灵活的匹配,所以需要自定义参数匹配器。
ArgumentMatcher抽象类
自定义参数匹配器的时候需要继承ArgumentMatcher抽象类,它实现了Hamcrest框架的Matcher接口,定义了describeTo方法,所以我们只需要实现matches方法在其中定义规则即可。
下面自定义的参数匹配器是匹配size大小为2的List:
Java代码
class IsListOfTwoElements extends ArgumentMatcher<List> {
public boolean matches(Object list) {
return ((List) list).size() == 2;
}
}
@Test
public void argumentMatchersTest(){
List mock = mock(List.class);
when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true);
mock.addAll(Arrays.asList("one", "two", "three"));
verify(mock).addAll(argThat(new IsListOfTwoElements()));
}
argThat(Matcher<T> matcher)方法用来应用自定义的规则,可以传入任何实现Matcher接口的实现类。上例中在stubbing和verify addAll方法时通过argThat(Matcher<T> matcher),传入了自定义的参数匹配器IsListOfTwoElements用来匹配size大小为2的List。因为例子中传入List的元素为三个,所以测试将失败。
较复杂的参数匹配将会降低测试代码的可读性。有时实现参数对象的equals()方法是个不错的选择(Mockito默认使用equals()方法进行参数匹配),它可以使测试代码更为整洁。另外,有些场景使用参数捕获器(ArgumentCaptor)要比自定义参数匹配器更加合适。
Mockito参数匹配器的实现使用了Hamcrest框架(一个书写匹配器对象时允许直接定义匹配规则的框架,网址:http://code.google.com/p/hamcrest/)。它已经提供了许多规则供我们使用, Mockito在此基础上也内建了很规则。但有时我们还是需要更灵活的匹配,所以需要自定义参数匹配器。
ArgumentMatcher抽象类
自定义参数匹配器的时候需要继承ArgumentMatcher抽象类,它实现了Hamcrest框架的Matcher接口,定义了describeTo方法,所以我们只需要实现matches方法在其中定义规则即可。
下面自定义的参数匹配器是匹配size大小为2的List:
Java代码
class IsListOfTwoElements extends ArgumentMatcher<List> {
public boolean matches(Object list) {
return ((List) list).size() == 2;
}
}
@Test
public void argumentMatchersTest(){
List mock = mock(List.class);
when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true);
mock.addAll(Arrays.asList("one", "two", "three"));
verify(mock).addAll(argThat(new IsListOfTwoElements()));
}
argThat(Matcher<T> matcher)方法用来应用自定义的规则,可以传入任何实现Matcher接口的实现类。上例中在stubbing和verify addAll方法时通过argThat(Matcher<T> matcher),传入了自定义的参数匹配器IsListOfTwoElements用来匹配size大小为2的List。因为例子中传入List的元素为三个,所以测试将失败。
较复杂的参数匹配将会降低测试代码的可读性。有时实现参数对象的equals()方法是个不错的选择(Mockito默认使用equals()方法进行参数匹配),它可以使测试代码更为整洁。另外,有些场景使用参数捕获器(ArgumentCaptor)要比自定义参数匹配器更加合适。
相关文章推荐
- 1、oracle后台进程(数据字典V$BGPROCESS)
- 前后端数据交互方法
- 数值的整数次方
- Linux C下进程操作实例
- linux企业常用服务---squit传统代理
- 【Android】图像增强
- mockito-ArgumentCaptor
- Qt:基于Qt开发的开源小工具包:JQTools
- Java中的项目的导入导出
- 学做Bootstrap的第一个页面
- 3D引擎Axiom的选择与学习.
- IOS 保存图片至相册
- RGB、Lab、YUV、HSI、HSV等颜色空间的区别
- android生成随机汉字
- 神奇的"验证码"
- 第十二周项目2——Time类中的运算符重载
- 第十一周【项目3 - 警察和厨师】
- [NOI 2014]做题记录
- 关于textjs的tree带复选框的树
- hdu 1051 Wooden Sticks(贪心)