【发布时间】:2014-01-29 20:09:06
【问题描述】:
我正在尝试对这个方法进行单元测试:
/**
* finds all widget descriptions containing specified text
* @param searchText
* @return
*/
@Transactional
public List<Integer> returnWidgetIdsFromSearchWord(String searchText){
List<Integer> widgetIds = new ArrayList<Integer>();
MapSqlParameterSource args = new MapSqlParameterSource();
try{
widgetIds = (List<Integer>) jdbt.queryForList("SELECT idwidgets FROM descriptions "
+ "WHERE descriptiontext LIKE '%"+ searchText + "%'", args, Integer.class);
}catch(Exception e){
}
return widgetIds;
}
使用这个 JUnit 测试:
@Test
public void testReturnWidgetIdsFromSearchWord(){
List<Integer> widgetIds = null;
when(jdbt.queryForList(Matchers.anyString(),
Matchers.any(MapSqlParameterSource.class),
Matchers.any(Integer.class))).thenReturn(idList);
widgetIds = (List<Integer>) dDao.returnWidgetIdsFromSearchWord("someText");
assertEquals(widgetIds, idList);
}
我尝试过在没有 Matcher 的情况下使用 Integer.class - 没有运气,因为它抱怨需要 3 个匹配器。有什么建议么?谢谢
【问题讨论】:
-
您可能需要检查一下 stackoverflow.com/questions/2631596/… 因为谷歌搜索 queryForList 它需要一个字符串和一个对象... varargs docs.spring.io/spring/docs/2.5.6/api/org/springframework/jdbc/… 但我不知道您使用的是哪个版本的界面.
-
jdbt是否意味着JdbcTemplate?如果是这样,您的代码似乎无法编译。 -
是的,jdbt 是 NamedParameterJdbcTemplate,它在设置中被模拟。原方法编译并返回预期的List
标签: java junit mockito junit4 matcher