Mockito不允许Matchers.any()使用Integer.class

 mobiledu2502890777 发布于 2023-01-30 15:11

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

/**
     * finds all widget descriptions containing specified text
     * @param searchText
     * @return
     */
    @Transactional
    public List returnWidgetIdsFromSearchWord(String searchText){
        List widgetIds = new ArrayList();
        MapSqlParameterSource args = new MapSqlParameterSource();

        try{
            widgetIds = (List) jdbt.queryForList("SELECT idwidgets FROM descriptions "
                    + "WHERE descriptiontext LIKE '%"+ searchText + "%'", args, Integer.class);
        }catch(Exception e){

        }

        return widgetIds;
    }

使用此JUnit测试:

@Test
    public void testReturnWidgetIdsFromSearchWord(){
        List widgetIds = null;

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

        widgetIds = (List) dDao.returnWidgetIdsFromSearchWord("someText");

        assertEquals(widgetIds, idList);
    }

我试过在没有Matcher的情况下使用Integer.class - 没有运气,因为它抱怨需要3个匹配器.有什么建议?谢谢

1 个回答
  • 不投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中所述:使用通用参数进行验证


    不要使用代码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>`
    

    2023-01-30 15:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有