JUnit Mockito返回LinkedList而不是ArrayList

时间:2017-07-25 12:47:18

标签: junit mockito

我的任务是弄清楚为什么这个JUnit测试失败了。我发现的是,不是返回一个ArrayList(比如getDeligationsForLoggedInUser是SUPPOSED返回的,它返回一个“userList”的LinkedList。

@SuppressWarnings("unchecked")
@Test
public  void test_getDelegationsForLoggedInUser()
{
    String userId="Abcd";
    List<String>  expectedUserList= new ArrayList<String>();
    expectedUserList.add("efghi");
    expectedUserList.add("jklmn");
    expectedUserList.add("opqrs");

    when(namedParameterJdbcTemplate.queryForObject(anyString(),anyMap(), any(RowMapper.class))).thenReturn(expectedUserList);
    List<String>  userList= workflowProcessDAOImpl.getDelegationsForLoggedInUser(userId);
    verify(namedParameterJdbcTemplate, times(1)).query(sqlCaptor.capture(), namedParameterMap.capture(), rowMapperCaptor.capture());
    assertThat(userList, is(expectedUserList));
    assertThat(sqlCaptor.getValue(), is(SQLConstantsSysConfigV1.getInstance().GET_USERIDS_FOR_DELEGATES));

}

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

您在此测试中模拟方法queryForObject,但测试方法query

我想你的代码定义了一个其他地方的函数模拟,不是吗?然后它可能只是复制/粘贴操作的结果......

答案 1 :(得分:0)

我也有同样的问题。为了解决这个问题,我替换了 Mockito.anyList()(如果需要的参数是列表)和 Mockito.anyLong()(如果需要的参数很长)。示例:-

 Mockito.when(testService.getData(Mockito.anyLong(),
    Mockito.anyList(), Mockito.anyList())).thenReturn(SOME_RESPONSE_DATA);