Java 单元测试的时候如果在一个mock内 使用多个 ArgumentMatchers ,根据不同参数返回不通结果,按照下面的写法:
T mock = Mock(T.class);
when(mock.method(argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object arg0) {
//比较逻辑1
}
}))).thenReturn(result1);
when(mock.method(argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object arg0) {
//比较逻辑2
}
}))).thenReturn(result2);
when(mock.method(argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object arg0) {
//比较逻辑3
}
}))).thenReturn(result3);
实际执行单元测试的时候会报java.lang.NullPointerException
解决办法:
doReturn(result1).when(mock).method(
argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object argument) {
///比较逻1
}
}));
doReturn(result2).when(mock).method(
argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object argument) {
///比较逻2
}
}));
doReturn(result1).when(mock).method(
argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object argument) {
///比较逻3
}
}));
即可正常执行。