使用Mockito

时间:2019-01-18 16:40:08

标签: java unit-testing mockito hamcrest

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

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

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

我用Google搜索了一下,但是什么都找不到:(

非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用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上调用的方法的默认返回值(当然,没有考虑好的值)。

答案 1 :(得分:1)

根据我评论的重复内容,您应该尝试:

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