Покрытие кода для других, кроме RunTimeException, не распространяется - PullRequest
0 голосов
/ 28 февраля 2019

Я пишу покрытие кода Junit для приведенного ниже кода Java, а код не распространяется на Otherthan Runtime Exception.

Пожалуйста, найдите мой код ниже Java.

public class NotifySupervisorJobTask implements Tasklet {

private static final Logger LOGGER = LoggerFactory.getLogger(NotifySupervisorJobTask.class);

    @Autowired
    private CoreClient client;

    @Autowired
    private ItemProcessFailedNotifier itemProcessFailedNotifier;

    @Override
      public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
        try {
            client.notifySupervisor(null);
            LOGGER.info("notifySupervisorJobTask - execute() called");        
        } catch (RuntimeException exception) {
          String errorMessage = format("Error in triggering notify supervisor job. Task will be repeated at next scheduled time. Error is: [%s]", exception.getMessage());
          LOGGER.error(errorMessage, exception);
          contribution.setExitStatus(FAILED);
          itemProcessFailedNotifier.notifyByEmailOnException(chunkContext.getStepContext(), new Exception(errorMessage,
              exception));

        }
        return RepeatStatus.FINISHED;
      }

}

Пожалуйста, найдите мой testcase код для other than runtime exception кейса.

@ InjectMocks private NotifySupervisorJobTask notifySupervisorJobTask;

@Mock
private ItemProcessFailedNotifier itemProcessFailedNotifier;

@Mock
private CoreClient client;

private ChunkContext chunkContext;

private StepContext stepContext;

@Before
public void setUp() {
    chunkContext = mock(ChunkContext.class);
    stepContext = mock(StepContext.class);
    when(chunkContext.getStepContext()).thenReturn(stepContext);
}

@Test(expected = Exception.class)
 public void shouldThrowExceptionOtherThanRuntimeException() throws Exception {
    Exception ex = mock(Exception.class);
    doThrow(ex).when(client).notifySupervisor(null); // Line not covered
    notifySupervisorJobTask.execute(null, chunkContext); // Line not covered
    verify(itemProcessFailedNotifier).notifyByEmailOnException(stepContext, ex); // Line not covered
 }

1 Ответ

0 голосов
/ 28 февраля 2019

Вы не можете сказать Mockito выдать исключение, которое не может быть сгенерировано методом mocked.

В Java вы проверяли и не проверяли исключения.В вашем случае не проверены подклассы RuntimeException.Проверяются все остальные (включая сам класс Exception), но они должны быть либо перехвачены, либо объявлены в сигнатуре окружающего метода.

Поскольку ваш метод notifySupervisor явно не объявляет никаких проверенных исключений(иначе ваш execute метод не скомпилируется), Mockito не может пойти против компилятора и выбросить такое исключение из его макета.

...