Композиция и зависимость объектов. Mockito при создании автотестов
На основе проекта с лекции необходимо реализовать менеджер Афиши (все фильмы хранятся внутри самого менеджера, без всякого репозитория):
Какие методы должны быть у менеджера?
- Добавить фильм в ленту.
- Выдать последние 10 добавленных фильмов* (фильмы выдаются в обратном порядке, т.е. первым в массиве результатов будет тот, который был добавлен последним).
Примечание*: если фильмов меньше 10, то выдаёте столько, сколько есть.
Сделайте так, чтобы по умолчанию выводилось последние 10 добавленных фильмов, но при создании менеджера можно было указать другое число, чтобы, например, выдавать 5 (а не 10).
Напишите необходимые, с вашей точки зрения, автотесты на различные состояния менеджера (можно их делать не в одном файле).
Требования к проекту:
- Подключите плагин Surefire так, чтобы сборка падала в случае отсутствия тестов.
- Подключите плагин JaCoCo в режиме генерации отчётов (обрушать сборку по покрытию не нужно).
- Реализуйте нужные классы и методы.
- Напишите автотесты на методы, содержащие логику, добившись 100% покрытия по branch'ам.
- Подключите CI на базе Github Actions и выложите всё на Github.
Как делать:
- Берёте код с лекции
- Заливаете в свой репозиторий
- Делаете новую ветку
- В новой ветке делаете все изменения (Surefire, JaCoCo, методы, автотесты, CI)
- Делаете Pull Request из этой ветки к своему же репозиторию
Итого: у вас должен быть репозиторий на GitHub, в котором расположен ваш Java-код и Pull Request.
В первой задаче создайте новую ветку layers
, в которой разделите менеджера на менеджера и репозиторий.
В репозитории должны быть следующие методы:
findAll
- возвращает массив всех хранящихся в массиве объектовsave
- добавляет объект в массивfindById
- возвращает объект по идентификатору (либоnull
, если такого объекта нет)removeById
- удаляет объект по идентификатору (если объекта нет, то пусть будет исключение, как на лекции)removeAll
* - полностью вычищает репозиторий
Подсказка
Для удаления всех элементов достаточно в items
положить пустой массив.
В Java встроен механизм, который называется Garbage Collection (сборка мусора), он сам удаляет из памяти машины неиспользуемые объекты.
Напишите автотесты на репозиторий (допускается, что как и в лекции на removeById
может возникать исключение при удалении по несуществующему id).
Обеспечьте использование менеджером созданного вами репозитория (новых функций в менеджер по сравнению с первым заданием добавлять не нужно). Репозиторий должен быть зависимостью для менеджера (т.е. задаваться через конструктор и храниться в приватном поле).
Покройте менеджера автотестами, используя Mockito для организации моков репозитория.
Итого у вас должно быть:
- Ветка
layers
, в которой должны быть классыAfishaManager
иAfishaRepository
- Автотесты на менеджер (с мокито) и на репозиторий (обычные автотесты), добившись 100% покрытия по branch'ам
- Pull Request на Github (удостоверьтесь, что CI успешно проводит сборку*)
Примечание*: если вы реализовали тест на удаление по несуществующему id, то допускается, что сборка в CI будет failed.
Итого: у вас должен быть репозиторий на GitHub, в котором расположен ваш Java-код и Pull Request.