Mockito参数匹配器

参数匹配器主要用于在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参数匹配器

文章图片
使用参数匹配器引发异常的示例
在这里, 我们将创建一个使用参数匹配器引发异常的示例。在此示例中, 我们将使用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参数匹配器

文章图片
【Mockito参数匹配器】以下输出显示错误, 因为我们没有使用@Test(expected = RuntimeException.class)。
Mockito参数匹配器

文章图片

    推荐阅读