参数匹配器主要用于在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 {
@Test
public 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));
}
}
输出如下
以下输出显示使用参数匹配器成功运行了测试。
使用参数匹配器引发异常的示例
在这里, 我们将创建一个使用参数匹配器引发异常的示例。在此示例中, 我们将使用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)成功运行了测试。
以下输出显示错误, 因为我们没有使用@Test(expected = RuntimeException.class)。
评论前必须登录!
注册