Mockito-ArgumentMatchers

时间:2019-09-30
本文章向大家介绍Mockito-ArgumentMatchers,主要包括Mockito-ArgumentMatchers使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本章将介绍如何使用ArgumentMatcher

Maven依赖

1
2
3
4
5
6
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>{latest.version}</version>
<scope>test</scope>
</dependency>

ArgumentMatchers

来看一种返回固定值的mock方法。

1
doReturn("Flower").when(flowerService).analyze("poppy");

可能会有需要支持更多入参或未知入参的情况,这时我们可以用argument matchers

1
when(flowerService.analyze(anyString())).thenReturn("Flower");

因为使用了anyString匹配,现在无论入参是多少,返回的都是Flower

多于多参数方法,Mocito要求对所有参数都要应用argument matchers进行匹配。

下面举一个错误的例子

1
2
3
4
5
6
7
abstract class  {
public abstract boolean isABigFlower(String name, int petals);
}

FlowerService mock = mock(FlowerService.class);

when(mock.isABigFlower("poppy", anyInt())).thenReturn(true);

如果要固定name为“poppy”,我们需要使用eq mactcher

1
when(mock.isABigFlower(eq("poppy"), anyInt())).thenReturn(true);

在使用mactcher时,有两点需要注意

  1. 不能使用matcher模拟返回值

  2. 不能再验证方法外使用matcher

1很好理解,对于2来看一个例子

1
2
String orMatcher = or(eq("poppy"), endsWith("y"));
verify(mock).analyze(orMatcher);

会抛出InvalidUseOfMatchersException,错误信息中给出了正确使用的demo。

正确使用如下

1
verify(mock).analyze(or(eq("poppy"), endsWith("y")));

Mockito还提供了额外的匹配方法(“not”、“and”、“or”)等。

参考资料:

Mockito ArgumentMatchers

原文:大专栏  Mockito-ArgumentMatchers


原文地址:https://www.cnblogs.com/petewell/p/11611614.html