Mokito多个ArgumentMatchers不生效

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
          }
        }));
复制代码

便可正常执行。单元测试

相关文章
相关标签/搜索