Внедрение зависимостей в EasyMock

Если зависимости в ваш код внедряются через конструктор или через сеттеры, использование очевидно: создаём mock и передаём его в тестируемый object. А если зависимости внедряются напрямую в поля класса, EasyMock связывает их автоматически 🙂

Возьмём код примера Hello, EasyMock и добавим к нему пару классов:

Протестируем класс Consumer:

EasyMockRule особым образом обрабатывает поля тестового класса, аннотированные @Mock  и @TestSubject.

Для каждого поля с аннотацией @Mock создаётся mock объект, имеющий поведение по умолчанию (nice mock). Состояние и поведение этого mock’а будет автоматически сбрасываться к исходному перед запуском каждого теста.

После создания mock’а он будет автоматически внедрён во все совместимые по типу поля объекта, помеченного @TestSubject, последний, кстати, надо создавать вручную. Таким образом связывание зависимостей производится автоматически и без оглядки на какие-либо dependency injection фреймворки.

Отмечу, что связывание в EasyMock жадное: найдя одно совместимое по типу поле EasyMock не остановится на нём и продолжит искать следующие подходящие поля и подсовывать в них mock объекты:

В случае, если необходимо использовать разные mock’и одного (или совместимого) типа, можно явно указать имя поля, для которого этот mock предназначен:

Код примера доступен на github.