Java 单元测试的时候若是在一个mock内 使用多个 ArgumentMatchers ,根据不一样参数返回不通结果,按照下面的写法:java
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.NullPointerExceptionbash
解决办法:ide
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
}
}));
复制代码
便可正常执行。单元测试