我正在尝试在 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
添加回答
举报
0/150
提交
取消