Skip to content
This repository has been archived by the owner on Apr 9, 2020. It is now read-only.
Alex Ivanov edited this page May 22, 2019 · 20 revisions

Задания на лабораторные работы по курсу Разработка ПО для Java и RDF4J

1. Основы IDE

  1. Установить Eclipse с помощью Eclipse Installer
  2. Изучить работу с Java кодом в среде Eclipse

2. Простейшие компоненты RDF4J

3. JUnit тесты

  1. Изучить туториал
    1. Прочитать руководство, прокликать раздел 8 в туториале https://www.vogella.com/tutorials/JUnit/article.html
    2. В результате прокликивания: создать тестируемый класс, создать JUnit 4 тест, запустить и поиследовать работу
  2. Сделать с нуля юнит-тест поведения движка SHACL валидации RDF данных Склонировать (или спулить) репозиторий https://github.com/agentlab/rdf-scheme-editor-server.git
    1. Импортировать как Maven проект
    2. Добавить зависимости JUnit в pom.xml
    3. Проверить, что в зависимостях rdf4j версии 2.5.0
    4. Создать пустой JUnit тест и запустить его в Eclipse IDE
    5. Создать два юнит-теста (на корректные и некорректные добавляемые данные) по коду примера https://github.com/eclipse/rdf4j-doc/blob/master/doc/programming/05-custom-sails.adoc#validation-with-shacl
  3. Настроить JUnit на работу с Maven
    1. Настроить сборку и прогон теста с помощью maven.
    2. Убедиться, что всеми зависимостями управляет Maven, что ничего не настроено в Eclipse в обход Maven
    3. Запустить сборку проекта с прогоном JUnit тестов и убедиться, что тесты прогоняются
    4. Внести ошибку в юнит-тест (чтобы он выполнялся неуспешно) и посмотреть, что будет при запуске прогона JUnit теста в maven из консоли

4. Тестирование взаимодействующих компонентов движка RDF4J с использованием Mockito. Производительность: профилирование и тесты

  1. Подключить Mockito версии 2.x к проекту в виде Maven-зависимости.
  2. Подключить аннотации Mockito https://www.baeldung.com/mockito-annotations
  3. Ознакомиться с документацией на rdf4j http://docs.rdf4j.org/sail#_notifyingsail_and_abstractnotifyingsail
  4. Реализовать для задания из п.3 с помощью Mockito mock-объект типа SailChangedListener и подключить его к тестируемому RDF репозиторию. Проверить, что метод sailChanged() вызывается хотя бы раз в тесте с данными, проходящими валидацию и не вызывается ни разу в тесте с некорректными данными.
  5. Реализовать ArgumentCaptor типа SailChangedEvent для метода sailChanged() mock-объекта. Проверить, что передаваемое в метод sailChanged() mock-объекта событие возвращает true при вызове statementsAdded().

5. Серверные модули, обрабатывающие запросы клиентов

6. Приложение из плагинов. Динамическая модульность OSGi

  1. Установка
    1. Скачать Apache Karaf и запустить его в отдельном окне консоли.
    2. Склонировать репозиторий agentlab/karaf-rest-example
    3. Открыть отдельную консоль (или открыть Eclipse), собрать в консоли (или Eclipse) склоненный репозиторий с помощью Maven и в консоли запущенного Karaf задеплоить собранные артефакты в соответствии с инструкцией agentlab/karaf-rest-example/README.md
    4. Проверить, что по ссылке http://localhost:8181 выдается справка о создании веб-сервиса, а по ссылке http://localhost:8181/booking веб-сервис возвращает пустой список.
    5. Настроить Karaf на мониторинг локального Maven-репозитория с помощью команды bundle:watch *
  2. Исследование работы веб-сервиса в Karaf
    1. Добавить в компонент метод-активатор, который выводит отладочную строку "BookingServiceRest Started" в консоль (System.out.println) и добавляет тестовые данные в bookings. Добавить в метод-деактиватор отладочный вывод строки "BookingServiceRest Stopped". См. Документация на аннотации компонентов OSGi
    2. Пересобрать проект Maven и проверить, что Karaf сделал редеплой
    3. С помощью get запроса по ссылке http://localhost:8181/booking из браузера проверить, что веб-сервис возвращает введенные данные в JSON.
  3. Исследование работы OSGi компонентов
    1. Создать OSGi DS компонент (обычный, не веб-сервис) SeatsChecker, позволяющий проверить по номеру рейса, есть ли там места (использовать в качестве тестовой реализации генератор случайных чисел). Для этого создать в проекте karaf-rest-api интерфейс SeatsChecker, а в проекте karaf-rest-whiteboard класс SeatsCheckerImpl с реализацией интерфейса и аннотацией @Component.
    2. Связать с помощью поля и аннотации @Reference компонент BookingServiceRest и компонент SeatsChecker так, чтобы BookingServiceRest каждый раз при добавлении регистрации на рейс проверял наличие свободных мест.
    3. Добавить в компонент активатор и деактиватор с тестовым выводом.
    4. Пересобрать и проверить работу.
    5. Проверить, работу policy=dynamic в связи @Reference и модифицировать BookingServiceRest, чтобы он работал при отсутствии сервиса SeatsChecker.

7. Тестирование взаимодействующих компонентов

8. Тестирование динамических модулей и системное тестирование