2017-10-20 155 views
1

我试图嘲笑jdbcTemplate抛出异常。jdbcTemplate上的mockito抛出编译错误

我试图抛出异常此方法上的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

尝试:

Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class)); 

when()调用来包装你的模拟;你不打电话给when()调用你的方法之后,你打包后向Mockito表明你期望发生什么。

+1

请提供一些细节,说明为什么这会起作用。 – mega6382

+0

这也没有工作。我仍然得到“无法解决方法” –

+0

您是否调试过并确保您的jdbcTempalte确实通过模拟正确填充? – dillius

5

下面的调用将编译:

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)