mock on jdbcTemplate抛出编译错误

时间:2017-10-20 22:51:45

标签: spring mocking mockito junit4 jdbctemplate

我正在尝试模拟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错误。

2 个答案:

答案 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表明你期望发生的事情。