我正在尝试模拟jdbcTemplate以抛出异常。
我试图在JdbcTemplate
上对此方法抛出异常 <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
这就是我所拥有的
@MockBean
JdbcTemplate jdbcTemplate;
Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), any(MyMapper.class)));
我收到编译错误cannot resolve method
。我也试过
Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), Matchers.<RowMapper<MyMapper>>any()));
但仍然得到同样的错误。
在这里做正确的方法是什么?
修改
如其中一个答案所示,我试过
Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class));
我仍然遇到cannot resolve the method
错误。
答案 0 :(得分:8)
以下调用将编译:
Mockito.doThrow(exception).when(jdbcTemplate).query(
Mockito.anyString(),
Mockito.any(Object[].class),
Mockito.any(MyMapper.class)
);
Mockito.doThrow(exception).when(jdbcTemplate).query(
Mockito.anyString(),
Mockito.any(Object[].class),
ArgumentMatchers.<RowMapper<MyMapper>>any())
);
这些和之前尝试过的关键区别在于第二个参数。在这种方法中:
<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException;
......第二个论点是:
Object[] args
看起来您将其与anyList()
匹配,并返回List<T>
。由于此参数的类型为Object[]
,因此应与返回Object[]
的内容匹配。例如:
Mockito.any(Object[].class)
答案 1 :(得分:0)
尝试:
Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class));
when()
调用是包装你的模拟;你不会在包裹后的when()
电话中调用你的方法来向Mockito表明你期望发生的事情。