如何使用整数参数值大于 X 的 Mockito 模拟方法调用?
我想写这样的东西:
doReturn("FooBar").when(persons).getPersons(Mockito.gt(10));
Mockito使用Hamcrest的匹配器。所有 Mockitos 参数匹配器都使用这些匹配器以方便且类型安全的方式匹配提供的参数。
Mockito还提供了使用Hamcrest的任何匹配器实现或自定义Matcher
实现argThat(Matcher)
的方法。还有专门的版本作为所有原始类型的intThat(Matcher)
。
所以,知道这一点,我重写了方法调用的模拟:
doReturn("FooBar")
.when(persons)
.getPersons(Mockito.intThat(Matchers.greaterThan(10));
Mockito 2
Hamcrest不再是Mockito匹配者的依赖。
但是,我发现MockitoHamcrest
似乎提供了与Hamcrest匹配器的互操作性。应用于相关示例,它看起来像这样:
doReturn("FooBar").when(persons)
.getPersons(MockitoHamcrest.intThat(Matchers.greaterThan(10)));
使用 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...
通过扩展 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)));