我需要从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<>);
以下任一模拟声明都将编译并匹配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()
参数