Mockito 中的 ClassCastException 用于 jdbcTemplate 查询

我正在尝试在 Spring 项目中测试一个类。我有以下方法


public List<Range> getRanges() {

    return getJdbcTemplate().query(RANGE_SQL, new RangeMapper());

}


public List<Score> getScores() {

    return getJdbcTemplate().query(SCORE_SQL, new ScoreMapper());

}


public Map<String, Object> getData() {

    //other code

    final List<Range> ranges = getRanges();

    final List<Score> scores = getScores();

}

在测试用例中getData()-


when(jdbcTemplate.query(any(String.class), any(RangeMapper.class))).thenReturn(rangeList);

when(jdbcTemplate.query(any(String.class), any(ScoreMapper.class))).thenReturn(scoresList);

当我为 运行测试时getData,它失败了,ClassCastException并指出“Score cannot be cast to Range”。当我调试并查看时,getRanges()ingetData()正在返回scoresList。为什么会发生这种情况以及如何解决这个问题?


qq_遁去的一_1
浏览 151回答 1
1回答

胡子哥哥

我建议改为模拟getRanges()和getScores()方法。when(theClass.getScores()).thenReturn(scoresList);when(theClass.getRanges()).thenReturn(rangesList);如果您需要按照自己的方式进行操作,则应指定字符串以获得正确的结果:when(jdbcTemplate.query(SCORE_SQL, any(ScoreMapper.class))).thenReturn(scoresList);when(jdbcTemplate.query(RANGE_SQL, any(RangeMapper.class))).thenReturn(rangesList);规范any(String.class)是这里的突破点。在您的情况下,您遇到了尚未指定的问题,在这种情况下它会返回正确的内容。所以如果你指定给定String它应该返回正确的List
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java