#spring #unit-testing #spring-mvc #mockito
Вопрос:
У меня есть простая служба REST, написанная на Java (Spring Boot). Идея состоит в том, чтобы разрешить пользователю добавлять новую сущность, если эта сущность не существует. Если он существует, я создаю исключение.
Вот код:
public ResponseEntity<String> addReadings(int clientId, int year, int month, double additionalConsumption) throws NoSuchMessageException, IllegalModificationException{
Optional<Client> clientOptional = clientService.findByClientId(clientId);
if (clientOptional.isEmpty()) {
return ResponseEntity.status(HttpStatus.NO_CONTENT)
.header("message", messageSource.getMessage("client.error1", null, new Locale("EN")))
.build();
}
Optional<Reading> reading = readingService.findByClientAndYearAndMonth(clientOptional.get(), year, month);
if (reading.isPresent()) throw new IllegalModificationException(messageSource.getMessage("consumption.error2", null, new Locale("EN")));
readingService.save(Reading.builder()
.client(clientOptional.get())
.year(year)
.month(month)
.consumption(additionalConsumption)
.build());
return ResponseEntity
.status(HttpStatus.OK)
.body(messageSource.getMessage("sucess", null, new Locale("EN")));
}
Вопрос в том, как проверить выбрасывание исключения с помощью Mockito в Spring framework, используя самый простой и чистый способ?
Ответ №1:
Имитируйте readingService
так, чтобы readingService.findByClientAndYearAndMonth
возвращалось необязательное значение, представляющее некоторое значение, т. Е. reading.isPresent()
is true
.
что-то вроде:
Client client = ...
ReadingServiceClass readingService = Mockito.mock(ReadingServiceClass.class);
Mockito
.when(readingService.findByClientAndYearAndMonth(client, 10, 2020))
.thenReturn(Optional.of(new Reading(...)));
// ... inject readingService into objectToTest
try {
objectToTest.addReadings(1, 2020, 10, 1.0d);
Assert.fail();
} (catch IllegalModificationException e) {
// ... assert details of exception
}
Комментарии:
1. Можете ли вы сказать мне, каково имя пакета для импорта Assert.fail()