2014-02-21 29 views

回答

9

使用的Mockito的Hamcrest匹配器。所有Mockitos参数匹配器都使用这些匹配器以便于使用和类型安全的方式匹配提供的参数。

Mockito还提供了使用Hamcrest的任何匹配器实现或自定义Matcher实现的方法argThat(Matcher)。对于所有原始类型,还有专门的版本intThat(Matcher)

所以,知道,我重写方法调用的嘲弄:

doReturn("FooBar") 
    .when(persons) 
    .getPersons(Mockito.intThat(Matchers.greaterThan(10)); 
+1

+1用于查找执行该工作的预先存在的匹配器。 –

1

通过扩展ArgumentMatcher(名为IntGreaterThan,例如)写Hamcrest Matcher<Integer>,然后用

doReturn("FooBar").when(persons).getPersons(intThat(MyMatchers.isGreatherThan(10))); 

其中MyMatchers.isGreaterThan(10)创建一个新的您的IntGreatherThan匹配器实例。

如果静态导入MyMatchers.isGreaterThan,它成为

doReturn("FooBar").when(persons).getPersons(intThat(isGreatherThan(10))); 
+1

+1。但是,难道你不能用现有的哈克雷斯特更大的匹配器而不是写自己的? –

+0

如果这样的匹配器存在,那么确定您可以使用它。 –

+0

是的,有这样一个匹配器。我只是想和你一样。 – Oliver

2

2的Mockito

Hamcrest不再是匹配器的Mockito的依赖。

但是,我发现MockitoHamcrest似乎提供与Hamcrest匹配器的互操作性。应用到有问题的示例中,它看起来像这样:

doReturn("FooBar").when(persons) 
     .getPersons(MockitoHamcrest.intThat(Matchers.greaterThan(10))); 
相关问题