我的任务是弄清楚为什么这个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));
}
有谁知道为什么会这样?
答案 0 :(得分:0)
您在此测试中模拟方法queryForObject
,但测试方法query
。
我想你的代码定义了一个其他地方的函数模拟,不是吗?然后它可能只是复制/粘贴操作的结果......
答案 1 :(得分:0)
我也有同样的问题。为了解决这个问题,我替换了 Mockito.anyList()(如果需要的参数是列表)和 Mockito.anyLong()(如果需要的参数很长)。示例:-
Mockito.when(testService.getData(Mockito.anyLong(),
Mockito.anyList(), Mockito.anyList())).thenReturn(SOME_RESPONSE_DATA);