2017-08-01 44 views
0

我想模擬以下方法。但是我沒有找到任何使用Java.util.Function的第二個參數Mockito.MatchersMockito/PowerMockito - 模擬接收Lambda表達式作爲參數的方法

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) 

回答

2

如果你只想嘲笑功能參數,那麼下面的任一會的工作:

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()

+0

@Glictch。這工作完美。輝煌! 'Mockito.when(convertStringtoInt(Matchers.anyList(),Mockito。 anyObject()))。然後返回(myMockedList);' – naga1990

相關問題