代码之家  ›  专栏  ›  技术社区  ›  riccardo.cardin

使用mockito将非空列表匹配为参数

  •  0
  • riccardo.cardin  · 技术社区  · 6 年前

    当我编写一些单元测试时,我遇到了这样一个问题:如果输入参数是一个非空的列表,我需要对一个模拟进行检测,以返回给定的结果。不必知道列表存储的值是什么。唯一重要的是它不是空的。

    我正在使用mockito,我正在搜索类似以下内容的内容。

    when(mock.someMethod(anyNotEmptyList(String.class))).thenReturn(42);
    

    我在谷歌上搜索了一下,但什么也找不到:(

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   riccardo.cardin    6 年前

    根据我评论的副本,你应该尝试:

    class IsAtLeastOneElementList extends ArgumentMatcher<List<String>> {
        public boolean matches(Object list) {
            return ((List) list).size() > 0;
        }
    }
    
        2
  •  2
  •   davidxxx    6 年前

    你可以和莫基托一起做 Answer 不使用Harmcret:

     when(mock.someMethod(anyListOf(String.class)))
    .then(invocation -> { 
                          List<String> list = invocation.getArgument(0);
                          return list.size() > 0 ? 42 : null;
                        }
     );
    

    这里我指定 null 作为默认值,它是在模拟上调用的方法的默认返回值(当然没有考虑好的值)。