作用:
匹配传入的参数,看其是否符合一定的条件
背景:
Mockito
有构造参数的功能- 构造的参数需使用参数匹配函数
- 参数匹配函数有时需使用参数匹配器
ArgumentMatcher
就是一种参数匹配器
使用方法:
- 构造
mock
对象 - 给
mock
对象存入方法的返回值 - 方法的输入参数使用
参数匹配函数
来构造 参数匹配函数
中的参数匹配器
可以自定义
效果:
- 符合条件的对象,会被存入方法采纳
- 不符合条件的对象,不会被存入方法采纳
实现:
public class AppTest {
@Test
void testArgumentMatchers2() {
List mockedList = mock(List.class);
// 存入方法:addAll
// 参数匹配函数:argThat
// 参数匹配器:ListOfTwoElements
when(mockedList.addAll(argThat(new ListOfTwoElements()))).thenReturn(true);
// 符合条件的对象,会被存入方法采纳
boolean myResult = mockedList.addAll(Arrays.asList("one", "two"));
System.out.println("add two element:" + myResult);
// 不符合条件的对象,不会被存入方法采纳
boolean myResult2 = mockedList.addAll(Arrays.asList("one", "two", "three"));
System.out.println("add three element:" + myResult2);
verify(mockedList).addAll(argThat(new ListOfTwoElements()));
}
}
class ListOfTwoElements implements ArgumentMatcher<List> {
public boolean matches(List list) {
return list.size() == 2;
}
public String toString() {
//printed in verification errors
return "[list of 2 elements]";
}
}