如何模拟jdbcTemplate.query(sqlQuery,new Object [] {id,name},new Mapper())

时间:2019-04-09 16:24:35

标签: java junit mockito

我需要从jdbcTemplate.query()填充模拟列表,以便它可以通过未通过空检查来增加覆盖率。

我尝试过

   List<ABC> list=new ArrayList<>();
    list = jdbcTemplate.query(sqlQuery,new Object[]{id,name}, new Mapper());
    if(list.isEmpty())
        return null;
    else if(!list.isEmpty){
            for(....)
    }

测试类

@InjectMocks
DaoImpl dao;
@Mock
JdbcTemplate jdbcTemplate;

@Test
public void retrieveResult(){
when(jdbcTemplate.query(Mockito.anyString(),Mockito.any(Object[].class),Mapper.class)).thenReturn(new ArraList<>);

1 个答案:

答案 0 :(得分:1)

以下任何一个模拟声明都将编译并匹配query签名。

when(jdbcTemplate.query(
    Mockito.anyString(), 
    Mockito.any(Object[].class), 
    Mockito.any(Mapper.class)
)).thenReturn(list);

when(jdbcTemplate.query(
    Mockito.anyString(), 
    Mockito.any(Object[].class), 
    ArgumentMatchers.<RowMapper<Mapper>>any())
)).thenReturn(list);

特别是:

  • Mockito.anyString()与代码中的sqlQuery参数匹配
  • Mockito.any(Object[].class)与代码中的new Object[]{id,name}参数匹配
  • Mockito.any(Mapper.class) / ArgumentMatchers.<RowMapper<Mapper>>any()与代码中的new Mapper()参数匹配