我的任务是找出为什么这个JUnit测试失败了。 我发现它不是返回一个ArrayList(就像getDeligationsForLoggedInUser应该返回的那样,而是返回一个"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));
}
有谁知道为什么会这样?
你在这个测试中模拟方法queryForObject
,但在方法上测试query
。
我想你的代码在其他地方定义了函数的模拟,不是吗?然后它可能只是复制/粘贴操作的结果......
我也有同样的问题。为了解决这个问题,我替换了 Mockito.anyList(((如果需要参数是列表(和Mockito.anyLong(((如果需要参数很长(。例:-
Mockito.when(testService.getData(Mockito.anyLong(),
Mockito.anyList(), Mockito.anyList())).thenReturn(SOME_RESPONSE_DATA);