代码之家  ›  专栏  ›  技术社区  ›  RandomWanderer

Mockito/PowerMockito-模拟接收Lambda表达式作为参数的方法

  •  4
  • RandomWanderer  · 技术社区  · 7 年前

    我想模拟以下方法。但我没有找到 Mockito.Matchers 对于使用 Java.util.Function

    public List<String> convertStringtoInt(List<Integer> intList,Function<Integer, String> intToStringExpression) {
            return intList.stream()
                    .map(intToStringExpression)
                    .collect(Collectors.toList());
        }
    

    我在找这样的东西:

    Mockito.when(convertStringtoInt(Matchers.anyList(),Matchers.anyFunction()).thenReturn(myMockedList)
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   glytching    7 年前

    如果您只想模拟函数参数,那么以下任一项都可以:

    Mockito.when(convertStringtoInt(Matchers.anyList(), Mockito.any(Function.class))).thenReturn(myMockedList);
    
    Mockito.when(convertStringtoInt(Matchers.anyList(), Mockito.<Function>anyObject())).thenReturn(myMockedList);
    

    给定一个类, Foo ,其中包含方法: public List<String> convertStringtoInt(List<Integer> intList,Function<Integer, String> intToStringExpression) 以下测试用例通过:

    @Test
    public void test_withMatcher() {
        Foo foo = Mockito.mock(Foo.class);
    
        List<String> myMockedList = Lists.newArrayList("a", "b", "c");
    
        Mockito.when(foo.convertStringtoInt(Matchers.anyList(), Mockito.<Function>anyObject())).thenReturn(myMockedList);
    
        List<String> actual = foo.convertStringtoInt(Lists.newArrayList(1), new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) {
                return null;
            }
        });
    
        assertEquals(myMockedList, actual);
    }
    

    thenAnswer() .