gpt4 book ai didi

java - Mockito 不允许 Matchers.any() 与 Integer.class

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:07 27 4
gpt4 key购买 nike

我正在尝试对该方法进行单元测试:

/**
* 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);
}

我试过只使用没有匹配器的 Integer.class - 运气不好,因为它会提示需要 3 个匹配器。有什么建议么?并感谢

最佳答案

不要强制转换 Matchers.anyVararg(),有更好的解决方案。

方法queryForList有签名

queryForList(String sql, SqlParameterSource paramSource, Class<T> elementType)

所以代替

when(jdbt.queryForList(Matchers.anyString(), 
Matchers.any(MapSqlParameterSource.class),
Matchers.any(Integer.class))).thenReturn(idList);

使用

when(jdbt.queryForList(Matchers.anyString(), 
Matchers.any(MapSqlParameterSource.class),
Matchers.<Class<Integer>>any())).thenReturn(idList);

Mockito: Verifying with generic parameters 中所述


不要将代码与 anyVararg() 和转换一起使用

when(jdbt.queryForList(Matchers.anyString(), 
Matchers.any(MapSqlParameterSource.class),
(Class<Object>) Matchers.anyVararg()).thenReturn(idList);

因为这会产生警告

Unchecked cast: `java.lang.Object` to `java.lang.Class<java.lang.Object>`

关于java - Mockito 不允许 Matchers.any() 与 Integer.class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com