参数匹配器主要用于在Mockito中执行灵活的验证和存根。它扩展了ArgumentMatchers类以访问所有匹配器函数。 Mockito使用equal()作为遗留方法来验证和匹配参数值。在某些情况下, 在验证参数值期间我们需要更大的灵活性, 因此我们应该使用参数匹配器而不是equal()方法。 ArgumentMatchers类在org.mockito包中可用。
ArgumentMatchers类包含多种方法。其中一些如下:
方法类型和方法名称 | 描述 |
---|---|
< T> 任何() | 它匹配所有值(任何值), 包括空值和varargs。 |
boolean anyBoolean() | 它与任何布尔值或非空布尔值匹配。 |
byte anyByte() | 它与任何字节或非空字节值匹配。 |
char anyChar() | 它与任何char或非null的字符值匹配。 |
集合< T> anyCollection | 它与应用程序中的任何非null集合匹配。 |
double anyDouble() | 它匹配任何双精度或非空双精度值。 |
float anyFloat() | 它与任何浮点或非空浮点值匹配。 |
int anyInt() | 它与任何int或非null的整数值匹配。 |
Iterable < T> anyIterable() | 它与任何int或非null的整数值匹配。 |
Iterable < T> anyIterable() | 它与任何非空的可迭代值匹配。 |
List < T> anyList() | 它匹配任何非空列表。 |
long anyLong() | 它匹配任何长或非空的long值。 |
Set < T> anySet() | 它匹配任何非空集。 |
short anyShort() | 它与任何short或非null的short值匹配。 |
String anyString() | 它匹配任何非空字符串。 |
< T> argThat(ArgumentMatcher < T> 匹配) | 它允许创建自定义参数匹配器。 |
boolean booleanThat(ArgumentMatcher < Boolean> 匹配器) | 它允许创建自定义布尔参数匹配器。 |
byte byteThat(ArgumentMatcher < Byte> 匹配) | 它允许创建自定义字节参数匹配器。 |
char charThat(ArgumentMatcher < 字符> 匹配器) | 它允许创建自定义char参数匹配器。 |
String contains(String substring) | 它与包含子字符串的String参数匹配。 |
double doubleThat(ArgumentMatcher < Double> 匹配器) | 它允许创建自定义的双参数匹配器。 |
String endsWith(String suffix) | 它匹配以给定后缀结尾的String参数。 |
boolean eq(boolean value) | 它与等于给定值的布尔参数匹配。 |
double eq(double value) | 它与等于给定值的double参数匹配。 |
long eq(long value) | 它匹配等于给定值的long参数。 |
< T> isNotNull() | 它与not null参数匹配。 |
< T> 为Null() | 它与null参数匹配。 |
< T> 相同(T值) | 它检查对象参数是否与给定值相同。 |
在这里, 我们将创建一个参数匹配器的示例。我们在测试案例中使用anyInt()方法, 我们可以使用ArgumentMatchers类中可用的任何方法。
TestList.java
import static org.junit.Assert.*;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
public class TestList { @Testpublic void testList_Argument_Matchers() {List<
String>
mocklist = mock(List.class);
when(mocklist.get(Mockito.anyInt())).thenReturn("Mockito");
assertEquals("Mockito", mocklist.get(0));
assertEquals("Mockito", mocklist.get(1));
assertEquals("Mockito", mocklist.get(2));
} }
输出如下
以下输出显示使用参数匹配器成功运行了测试。
![Mockito参数匹配器](http://img.readke.com/220511/23234R5S-0.png)
文章图片
使用参数匹配器引发异常的示例
在这里, 我们将创建一个使用参数匹配器引发异常的示例。在此示例中, 我们将使用JUnit功能@Test(expected = RuntimeException.class)来防止测试失败。如果我们不使用它, 则测试将失败并引发异常。
TestList.java
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;
public class TestList { @Test(expected = RuntimeException.class)public void testList_ThrowsException() {List<
String>
mocklist = mock(List.class);
when(mocklist.get(Mockito.anyInt())).thenThrow(new RuntimeException("Error.."));
mocklist.get(0);
} }
输出如下
以下输出显示使用@Test(expected = RuntimeException.class)成功运行了测试。
![Mockito参数匹配器](http://img.readke.com/220511/23234V312-1.png)
文章图片
【Mockito参数匹配器】以下输出显示错误, 因为我们没有使用@Test(expected = RuntimeException.class)。
![Mockito参数匹配器](http://img.readke.com/220511/23234T107-2.png)
文章图片
推荐阅读
- 参数捕获器(ArgumentCaptor)
- 读取 Android 设备内核日志的方法
- etherlime-3-Etherlime Library API-Deployed Contract Wrapper
- sonarqube扫描安卓代码
- android license status unknown解决办法
- idea中applicationContext-dao.xml文件中Cannot resolve file***** :spring xml model validation问题
- 区块链资产管理钱包APP软件系统开发搭建
- Android 目录结构
- android手机使用Fiddler