我正在为我的spring Boot 应用程序编写junit测试用例,并且必须达到90%的代码覆盖率。我也想覆盖catch块的覆盖率,所以我尝试了DAO层方法的catch块的测试用例,但它没有按预期工作。
下面的代码是DAO层代码
public class GeneratorRepository {
@Value("${existingQuery}")
private String existingQuery;
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
private BeanPropertyRowMapper<Generator> generatorRowMapper;
public Generator findExisting(Request request) {
Generator ut = new Generator();
try {
SqlParameterSource namedParameters = new MapSqlParameterSource()
.addValue("no", request.getId(), Types.VARCHAR)
.addValue("trSu", request.getSu(), Types.VARCHAR)
.addValue("sta", request.getSta(), Types.VARCHAR);
uti = namedParameterJdbcTemplate.queryForObject(existingQuery, namedParameters, generatorRowMapper);
} catch (EmptyResultDataAccessException e) {
uti = null;
} catch (Exception e) {
throw e;
}
return ut;
}
}
我的测试用例这个测试用例它没有覆盖catch块。
@Test
public void findExistingException() {
Request request = new Request("12365", "QW" "qw");
when(namedParameterJdbcTemplate.queryForObject(ArgumentMatchers.<String>any(), any(SqlParameterSource.class), eq(generatorRowMapper))).thenReturn(null);
when(generatorRepo.findExisting(request)).thenThrow(new EmptyResultDataAccessException(1));
EmptyResultDataAccessException exception = assertThrows(EmptyResultDataAccessException.class, () -> generatorRepo.findExisting(request));
}
1条答案
按热度按时间ghhaqwfi1#
您只需要模拟
queryForObject
方法调用并使其抛出所需的异常。之后,您可以Assert返回的Generator
为null(因为在本例中,您正在分配值:uti = null;
和稍后返回它):