如何使用大于X的整数参数来模拟方法调用

时间:2014-02-21 11:37:11

标签: mocking mockito

如何使用大于X的整数参数值模拟Mockito的方法调用?

我想写这样的东西:

doReturn("FooBar").when(persons).getPersons(Mockito.gt(10));

4 个答案:

答案 0 :(得分:10)

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

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

所以,知道了,我重写了方法调用的模拟:

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

答案 1 :(得分:5)

Mockito 2

Hamcrest不再是对Mockito匹配者的依赖。

但是,我发现MockitoHamcrest似乎提供了与Hamcrest匹配器的互操作性。应用于相关示例,它看起来像这样:

doReturn("FooBar").when(persons)
        .getPersons(MockitoHamcrest.intThat(Matchers.greaterThan(10)));

答案 2 :(得分: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)));

答案 3 :(得分:1)

使用AdditionalMatchers.gt:

import static org.mockito.Mockito.when;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.AdditionalMatchers.gt;
...
@Mock
private WalletService walletService;
...
@Before...
when(walletService.withdraw(eq(777), gt(1000), 
eq("USD"))).thenReturn(INSUFFICIENT_FUNDS);
...
@Test...