Как работает обработка аннотаций в JUnit?

Не понимаю, как фреймворки работают с аннотациями.

Например, JUnit. В классе у метода пишем @Test и уже можно запускать проект. Причем, без Main метода.

Мне понятно, что есть какой-то обработчик на рефлексии в который инкапсулированна логика. НО, как при старте приложения фреймворк регистрирует свой обработчик аннотаций? Как JVM понимает, что нужно его использовать?


Ответы (1 шт):

Автор решения: Roman Konoval

Когда вы запускаете тесты, то вы их не запускаете как обычное java приложение. Вы запускаете либо из IDE либо с помощью плагинов к maven или gradle.

Рассмотрим сначала IDE. Тут используется специальный test runner, т.е. приложение с методом main (которое поставляется вместе с IDE), которое используя сканирование classpath (если запуск идет для всего проекта), либо использует конкретный класс (если тесты запускаются для конкретного класса). test runner с помощью рефлексии ищет методы с аннотацией, создает экземпляры теста и запускает их. Это приложение использует API junit, который позволяет запускать тесты.

Запускается он, когда вы выбираете пункт меню в IDE запустить тесты. Вот как конфигурация запуска тестов выглядит в eclipse: eclipse test runnner

При нажатии на Run IDE запустит test runner.

Аналогично работают плагины для maven и gradle, во время сборки они используют API junit для запуска test runner-ов.

Т.е JVM нечего не знает. Если реализованные классы test runner-ов, которые занимаются поиском, инстанциированием и запуском тестов.

→ Ссылка