mock on jdbcTemplate抛出编译错误

bra*_*orm 1 spring mocking jdbctemplate junit4 mockito

我试图模拟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)));
Run Code Online (Sandbox Code Playgroud)

我得到编译错误,cannot resolve method.我也试过了

Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), Matchers.<RowMapper<MyMapper>>any()));
Run Code Online (Sandbox Code Playgroud)

但仍然得到相同的错误.

在这里做正确的方法是什么?

编辑

正如其中一个答案中所建议的,我试过了

 Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class));
Run Code Online (Sandbox Code Playgroud)

我仍然得到cannot resolve the method错误.

gly*_*ing 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())
);
Run Code Online (Sandbox Code Playgroud)

这些与之前尝试的内容之间的关键区别在于第二个参数.在这个方法中:

<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException;
Run Code Online (Sandbox Code Playgroud)

......第二个论点是:

Object[] args
Run Code Online (Sandbox Code Playgroud)

看起来你正在匹配这个anyList()返回List<T>.由于此参数属于类型,Object[]因此应与返回的参数匹配Object[].例如:

Mockito.any(Object[].class)
Run Code Online (Sandbox Code Playgroud)