Skip to content

JavaLabs2025/OrderProcessingService

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛒 Лабораторная работа: Тестирование системы обработки заказов

Java CI with Gradle (Сюда необходимо вставить реальный бейдж статуса сборки из вашего репозитория)

Добро пожаловать в проект интернет-магазина! Вам предоставлен готовый код бизнес-логики (backend) небольшой E-commerce системы. Код компилируется и работает, но в нём отсутствуют тесты. Ваша задача — спроектировать и написать набор Unit- и интеграционных тестов, настроить непрерывную интеграцию (CI) и оценить качество покрытия кода.

Стек технологий: Java 21, Gradle, JUnit 5, Mockito.


⏱️ Мягкий дедлайн для защиты: 01.05.2026

🏗 Структура проекта (Домены)

Проект спроектирован по принципу разделения на предметные области (Package by Feature/Domain). Это поможет вам понять, какие виды тестов применять к конкретным пакетам:

  • 📦 customer и catalog — Сущности пользователей, товаров и интерфейс Склада (InventoryService).
  • 💳 payment — Интерфейс платежного шлюза (PaymentGateway).
  • 🧮 pricingЦенообразование (Чистая логика). Здесь лежат DiscountCalculator и DeliveryCostCalculator. Это идеальные кандидаты для классических Unit-тестов, параметризованных тестов и тестов с подменой времени (Clock).
  • ⚙️ orderОркестратор заказов. Класс OrderProcessor связывает калькуляторы, банк и склад. Здесь вам потребуются Интеграционные тесты с использованием Mockito для создания заглушек (моков) внешних систем.

🎯 Ваше задание

1. Проектирование и написание автотестов

Вам необходимо покрыть предоставленный код автотестами.

⚠️ ВНИМАНИЕ: О предоставленном примере кода! В репозитории может находиться один демонстрационный тест (например, OrderProcessorTest). Это исключительно пример синтаксиса использования JUnit 5 и Mockito. Вы самостоятельно решаете:

  • Какие классы эквивалентности и граничные значения проверять.
  • Какие негативные сценарии обрабатывать.
  • Как структурировать папку src/test/java/....
  • Какие тестовые классы и методы создавать.

Ваши тесты должны демонстрировать понимание следующих техник:

  • Обычные модульные тесты (проверка логики).
  • Параметризованные тесты (@ParameterizedTest).
  • Управление временем в тестах.
  • Создание Stub-объектов (заглушек) возвращающих нужные значения (when(...).thenReturn(...)).
  • Проверка взаимодействия (Verification) — проверка того, что методы вызывались нужное количество раз (или не вызывались вообще).

Количество тестов не регламентировано — главное продемонстировать соответствующие навыки.

2. Настройка GitHub CI

Ваш код должен автоматически собираться и тестироваться при каждом пуше или по требованию вручную. Желательно научиться запускать тесты под разные ОС.

  1. Создайте в корне репозитория директорию .github/workflows/.
  2. Добавьте туда YAML-файл (например, gradle.yml) с конфигурацией GitHub Actions для сборки Java-проекта через Gradle.
  3. Настройте запуск команды ./gradlew test (или ./gradlew build).
  4. Получите markdown-ссылку на бейдж статуса сборки (Status Badge) и вставьте её в самое начало этого README.md.

Подсказка: GitHub может сгенерировать базовый workflow для Gradle автоматически, если вы перейдете во вкладку "Actions" в вашем репозитории.

3. Advanced: Оценка покрытия кода (Code Coverage) (Опционально)

Написать тесты — половина дела. Нужно понять, какую часть кода они проверяют. Вам необходимо собрать метрики покрытия (Line Coverage, Branch Coverage).

Как это сделать:

  • Вариант А (Простой): Использовать встроенные инструменты вашей IDE. В IntelliJ IDEA или Eclipse можно нажать правой кнопкой мыши на папку test и выбрать «Run with Coverage». Сделайте скриншот полученного отчета и приложите к сдаче работы.
  • Вариант Б (Не такой простой): Подключить плагин JaCoCo (id 'jacoco') в файл build.gradle. При запуске команды ./gradlew test jacocoTestReport он автоматически сгенерирует HTML-отчет, который можно будет найти в папке build/reports/jacoco/test/html/index.html.

❗Порядок сдачи

  • Написать в ЛС, указать ФИО и ссылку на PR в ветку feedback
  • Продемонстрировать полученные навыки на защите в формате объяснения принятых решений и ответов на вопросы

📚 Полезные ссылки и материалы

(Ниже представлены ссылки, которые помогут вам в выполнении лабораторной работы)

Не полагайтесь только на них, умение гуглить все непонятное — основа решения всех проблем.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages