Решил попробовать проговаривать основные новости по прошедшей неделе и о планах на следующую в виде короткого подкаста.
Прицельный обзор: Как создаются бины в Spring Framework
Основной интерфейс - BeanFactory
. Основной метод - getBean
. Его расширяют такие интерфейсы как:
ListableBeanFactory
для доступа к спискам экземпляров созданных bean’овHierarchicalBeanFactory
для организации иерархичных фабрик биновConfigurableBeanFactory
определяет методы, конфигурирующие бины
Прицельный обзор: Как работает Dependency Injection в Spring Framework
Для того, чтобы ответить на этот вопрос, нужно определить точку входа. Для начала организуется контекст приложения - вручную для стандартных приложений или автоматически при использовании Spring‘а в Web. Сразу хочу отметить, Spring Framework отличается высоким уровнем абстракции. Немалая часть реализации организуется путем глубокого наследования (5-6 уровней). Так ApplicationContext
компонует в себе общий функционал по работе с состоянием приложения путем реализации нескольких интерфейсов. Затем, делая cast к тому или иному интерфейсу, можно работать с определенным функционалом. К примеру:
Mockito: Обработка методов
Вместе с mock’ом создается обработчик его событий. Это один обработчик на все методы мока. В итоге, мы имеем объект класса MockHandlerImpl
, который обернут wrapper’ами.
Mockito: Как создаются Mock’и
Работа с Mockito начинается, как ни странно, с класса org.mockito.Mockito
. Этот класс содержит в себе несколько статичных методов, которые обычно и импортируются в тест-класс. Первое же, что бросается в глаза, это огромные JavaDoc комментарии. Разработчики решили вести настоящий Tutorial прямо в коде. Обнаружить код среди такого обилия комментариев без использования инструментов IDE весьма непросто. Класс Mockito делегирует все вызовы классу org.mockito.internal.MockitoCore
. Если класс Mockito - точка входа внешнего API, то MockitoCore
- точка входа во внутреннюю реализацию проекта.
Mockito: @InjectMocks
Процесс внедрения mock’ов разделен на несколько этапов:
- Поиск полей, отмеченных аннотацией
@InjectMocks
- Поиск мок объектов в тесте
- Внедрение найденных моков в поля, помеченные аннотацией
@InjectMocks
Mockito: Обработка аннотаций
Как говорилось ранее, метод MockitoAnnotations#initMocks
инициализирует объекты, аннотированные одной из ключевых аннотаций (@Spy
, @Mock
, @Captor
, @InjectMocks
). Сегодня мы увидим как обрабатываются аннотации. Архитектура должна быть гибкой, чтобы позволить удобно добавлять новые аннотации.
Mockito: Использование аннотаций
Mockito поддерживает аннотации с 0.9’ой версии. В той версии была введена аннотация @Mock
, которая позволяет создавать mock-объекты. Далее были добавлены и другие аннотации:
@Spy
создает spy-объекты@Captor
создает экземпляр ArgumentCapture@InjectMocks
внедряет mock- и spy- объекты в аннотированный объект@Incubating
определяет недавно добавленный класс, с возможностью его изменения.
Mockito: Структура проекта
Mockito - библиотека для динамического создания mock-объектов и манипуляции ими. Разработка начата в 2007’ом году польским разработчиком Стивеном Фабером (Szczepan Faber). Первый релиз выпущен в 2008’ом. Последний в начале июня 2012’го. Официальный сайт находится на Google Code’e. Issue Tracker и Wiki там же, но в репозитории сохранились текстовые файлы с заметками и планами на будущее.