参数匹配器

2025年3月17日 | 阅读 3 分钟

参数匹配器主要用于在 Mockito 中执行灵活的验证和存根。它扩展了 ArgumentMatchers 类以访问所有匹配器函数。Mockito 使用 equal() 作为验证和匹配参数值的传统方法。在某些情况下,我们需要在验证参数值时具有更大的灵活性,因此我们应该使用参数匹配器而不是 equal() 方法。ArgumentMatchers 类在 org.mockito 包中可用。

ArgumentMatchers 类包含多种方法;下面列出了一些:

方法类型和方法名描述
<T> any()它匹配所有值(任何东西),包括 null 值和可变参数。
boolean anyBoolean()它匹配任何布尔值或非 null 布尔值。
byte anyByte()它匹配任何字节或非 null 字节值。
char anyChar()它匹配任何字符或非 null 字符值。
Collection <T> anyCollection它匹配应用程序中的任何非 null 集合。
double anyDouble()它匹配任何双精度值或非 null 双精度值。
float anyFloat()它匹配任何浮点值或非 null 浮点值。
int anyInt()它匹配任何整数值或非 null 整数值。
Iterable<T> anyIterable()它匹配任何整数值或非 null 整数值。
Iterable<T> anyIterable()它匹配任何非 null 可迭代值。
List<T> anyList()它匹配任何非 null 列表。
long anyLong()它匹配任何长整型或非 null 长整型值。
Set<T> anySet()它匹配任何非 null 集合。
short anyShort()它匹配任何短整型或非 null 短整型值。
String anyString()它匹配任何非 null 字符串。
<T> argThat(ArgumentMatcher<T> matcher)它允许创建自定义参数匹配器。
boolean booleanThat(ArgumentMatcher<Boolean> matcher)它允许创建自定义布尔参数匹配器。
byte byteThat(ArgumentMatcher<Byte> matcher)它允许创建自定义字节参数匹配器。
char charThat(ArgumentMatcher<Character> matcher)它允许创建自定义字符参数匹配器。
String contains(String substring)它匹配包含子字符串的字符串参数。
double doubleThat(ArgumentMatcher<Double> matcher)它允许创建自定义双精度参数匹配器。
String endsWith(String suffix)它匹配以给定后缀结尾的字符串参数。
boolean eq(boolean value)它与等于给定值的布尔参数匹配。
double eq(double value)它与等于给定值的双精度参数匹配。
long eq(long value)它与等于给定值的长整型参数匹配。
<T> isNotNull()它与非 null 参数匹配。
<T> is Null()它匹配 null 参数。
<T> same(T value)它检查对象参数是否与给定值相同。

注意:使用参数匹配器时,所有参数都必须由匹配器提供。

参数匹配器的示例

在这里,我们将创建一个参数匹配器的示例。 我们在测试用例中使用 anyInt() 方法,我们可以使用 ArgumentMatchers 类中可用的任何方法。

TestList.java

输出

以下输出显示使用参数匹配器成功运行测试。

Argument matchers

使用参数匹配器抛出异常的示例

在这里,我们将创建一个使用参数匹配器抛出异常的示例。 在此示例中,我们将使用 JUnit 特性 @Test(expected = RuntimeException.class) 来防止测试失败。 如果我们不使用它,测试将失败并抛出异常。

TestList.java

输出

以下输出显示使用 @Test(expected = RuntimeException.class) 成功运行测试。

Argument Matcher

以下输出显示错误,因为我们未使用 @Test(expected = RuntimeException.class)

Argument Matcher
下一主题行为驱动开发