为了账号安全,请及时绑定邮箱和手机立即绑定

Mockito 中的 ClassCastException 用于 jdbcTemplate 查询

Mockito 中的 ClassCastException 用于 jdbcTemplate 查询

qq_遁去的一_1 2021-06-01 17:43:21
我正在尝试在 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。为什么会发生这种情况以及如何解决这个问题?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

我建议改为模拟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


查看完整回答
反对 回复 2021-06-10
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信