/BillboardManager

Домашнее задание к занятию «Композиция и зависимость объектов. Mockito при создании автотестов»

Primary LanguageJava

Домашнее задание к занятию «Композиция и зависимость объектов. Mockito при создании автотестов»

На основе проекта с лекции необходимо реализовать менеджер Афиши (все фильмы хранятся внутри самого менеджера, без всякого репозитория).

Какие методы должны быть у менеджера?

  1. Добавить фильм в ленту.
  2. Выдать последние 10 добавленных фильмов (фильмы выдаются в обратном порядке, т.е. первым в массиве результатов будет тот, который был добавлен последним).

Примечание: если фильмов меньше 10, то выдаёте столько, сколько есть.

Сделайте так, чтобы по умолчанию выводилось последние 10 добавленных фильмов, но при создании менеджера можно было указать другое число, чтобы, например, выдавать 5 (а не 10).

Напишите необходимые, с вашей точки зрения, автотесты на различные состояния менеджера (можно их делать не в одном файле).

Требования к проекту:

  1. Подключите плагин Surefire так, чтобы сборка падала в случае отсутствия тестов.
  2. Подключите плагин JaCoCo в режиме генерации отчётов (обрушать сборку по покрытию не нужно).
  3. Реализуйте нужные классы и методы.
  4. Напишите автотесты на методы, содержащие логику, добившись 100% покрытия по branch'ам.
  5. Подключите CI на базе Github Actions и выложите всё на Github.

Как делать:

  1. Берёте код с лекции
  2. Заливаете в свой репозиторий
  3. Делаете новую ветку
  4. В новой ветке делаете все изменения (Surefire, JaCoCo, методы, автотесты, CI)
  5. Делаете Pull Request из этой ветки к своему же репозиторию

В первой задаче создайте новую ветку layers, в которой разделите менеджера на менеджера и репозиторий.

В репозитории должны быть следующие методы:

  1. findAll - возвращает массив всех хранящихся в массиве объектов
  2. save - добавляет объект в массив
  3. findById - возвращает объект по идентификатору (либо null, если такого объекта нет)
  4. removeById - удаляет объект по идентификатору (если объекта нет, то пусть будет исключение, как на лекции)
  5. removeAll - полностью вычищает репозиторий Для удаления всех элементов достаточно в items положить пустой массив. В Java встроен механизм, который называется Garbage Collection (сборка мусора), он сам удаляет из памяти машины неиспользуемые объекты. Напишите автотесты на репозиторий (допускается, что как и в лекции на removeById может возникать исключение при удалении по несуществующему id).

Обеспечьте использование менеджером созданного вами репозитория (новых функций в менеджер по сравнению с первым заданием добавлять не нужно). Репозиторий должен быть зависимостью для менеджера (т.е. задаваться через конструктор и храниться в приватном поле).

Покройте менеджера автотестами, используя Mockito для организации моков репозитория.

Итого у вас должно быть:

  1. Ветка layers, в которой должны быть классы AfishaManager и AfishaRepository
  2. Автотесты на менеджер (с мокито) и на репозиторий (обычные автотесты), добившись 100% покрытия по branch'ам
  3. Pull Request на Github (удостоверьтесь, что CI успешно проводит сборку)