У меня есть API-интерфейс restboot rest, который выполняет операцию «Выбор» в базе данных на основе «studentId» типа «String».Ниже я смоделировал сценарий на примере студенческого примера.
Я написал 2 модульных теста (с использованием spock и junit mockito) для проверки функциональности.(Код модульного теста, который я не упомянул в этом вопросе, надеясь, что он не понадобится)
модульные тесты -
Вызов API с действительным 'studentId'для которого существует запись в базе данных. Этот модульный тест проверяет функциональность, написанную в блоке try {} (else part)
Вызов API с недопустимым идентификатором студента.Нет записи в базе данных для этого студенческого идентификатора.Этот модульный тест проверяет функциональность, записанную в блоке try {} (если условие), а затем переходит в блок catch (NoDataFoundException)
Я также реализовал jacoco для измерения покрытия кода.Проблема в том, что jacoco покрывает весь код и помечает его зеленым, за исключением блока catch (Exception).Причина довольно очевидна в том, что я не предоставил никакого модульного теста для охвата блока catch (Exception).Проблема в том, что я не мог придумать сценарий, который может вызвать «исключение».Тем не менее, я хотел бы сохранить улов (Исключение) в моем коде, чтобы перехватить любые непредсказуемые исключенияэто важно, по крайней мере, характер проекта, над которым я работаю, это действительно так.
Кто-нибудь сталкивался с такой ситуацией?Что вы сделали, чтобы покрыть улов (исключение) в отчете о покрытии кода jacoco.Любой совет, указатели будут очень цениться.
Ниже приведен класс контроллера-
@RestController
public class ApiController {
@Autowired
StudentInfoRepository studentInfo; // StudentInfoRepository is Interface having method 'fetchStudentDetails'. This method is provided implementation in a class named 'StudentInfoImplementation'
@RequestMapping(value = "/students/{studentId}", produces = "application/json", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<Object> getStudentInfo(@PathVariable("studentId") String studentId) throws Exception {
Result<StudentModelClass> studentList = null;
ResponseEntity<Object> response = null;
try {
studentList = studentInfo.fetchStudentDetails(studentId);
//if no records are returned for given studentId then throw custom 'NoDataFoundException'
if (studentList.isExhausted()) {
throw new NoDataFoundException("No record found for the requested studentId: " + studentid);
//if records are returned for the given studentId then return 200 response and list of records
} else {
response = new ResponseEntity<Object>(studentList.all(), HttpStatus.OK);
return response;
}
}
catch(NoDataFoundException ex){
throw new NoDataFoundException(ex.getMessage());
}
catch(Exception ex){
throw new Exception(ex);
}
}
}