У нас есть проект Spring Boot, который использует Consumer<T>
функциональный интерфейс Java для обработки сообщений String как JSON. Поскольку accept()
не допускает проверенных исключений, мы аннотируем его с помощью @SneakyThrows (JsonProcessingException.class). Мы включаем тесты, которые проверяют, что ожидаемые исключения генерируются при передаче null
и ""
(пустая строка). Все отлично работает.
Теперь нам нужно добавить метрики к этому методу. После добавления аннотации @Timed тест, проверявший исключение JsonProcessingException, завершился ошибкой с неожиданным java.lang.reflect.UndeclaredThrowableException
.
Меня это удивляет. Аннотация @SneakyThrows обрабатывается во время компиляции, поэтому не следует ли аспекту @Timed просто обернуть этот метод и повторно выбросить исключение JsonProcessingException? Что мы можем сделать, чтобы аннотация @Timed так работала?
Вы можете найти проект на https://github.com/mrgrew/timedsneaky, который демонстрирует проблему.
Это может быть связано с Spring + lombok + @SneakyThrows, но эти решения, похоже, предлагали переписать тесты, которые не кажется правильным.