使用 Mockito 匹配一个非空列表作为参数

Matching a not empty list as an argument using Mockito

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

我正在使用 Mockito,我正在搜索如下内容。

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

我用谷歌搜索了一下,但找不到任何东西。

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

class IsAtLeastOneElementList extends ArgumentMatcher<List<String>> {
    public boolean matches(Object list) {
        return ((List) list).size() > 0;
    }
}

您可以使用 Mockito Answer 而不使用 Harmcrest 来做到这一点:

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

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