This repository has been archived by the owner on Apr 9, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Home
Alex Ivanov edited this page May 22, 2019
·
20 revisions
Задания на лабораторные работы по курсу Разработка ПО для Java и RDF4J
- Установить Eclipse с помощью Eclipse Installer
- Изучить работу с Java кодом в среде Eclipse
- Изучить туториал
- Прочитать руководство, прокликать раздел 8 в туториале https://www.vogella.com/tutorials/JUnit/article.html
- В результате прокликивания: создать тестируемый класс, создать JUnit 4 тест, запустить и поиследовать работу
- Сделать с нуля юнит-тест поведения движка SHACL валидации RDF данных
Склонировать (или спулить) репозиторий https://github.com/agentlab/rdf-scheme-editor-server.git
- Импортировать как Maven проект
- Добавить зависимости JUnit в pom.xml
- Проверить, что в зависимостях rdf4j версии 2.5.0
- Создать пустой JUnit тест и запустить его в Eclipse IDE
- Создать два юнит-теста (на корректные и некорректные добавляемые данные) по коду примера https://github.com/eclipse/rdf4j-doc/blob/master/doc/programming/05-custom-sails.adoc#validation-with-shacl
- Настроить JUnit на работу с Maven
- Настроить сборку и прогон теста с помощью maven.
- Убедиться, что всеми зависимостями управляет Maven, что ничего не настроено в Eclipse в обход Maven
- Запустить сборку проекта с прогоном JUnit тестов и убедиться, что тесты прогоняются
- Внести ошибку в юнит-тест (чтобы он выполнялся неуспешно) и посмотреть, что будет при запуске прогона JUnit теста в maven из консоли
4. Тестирование взаимодействующих компонентов движка RDF4J с использованием Mockito. Производительность: профилирование и тесты
- Подключить Mockito версии 2.x к проекту в виде Maven-зависимости.
- Подключить аннотации Mockito https://www.baeldung.com/mockito-annotations
- Ознакомиться с документацией на rdf4j http://docs.rdf4j.org/sail#_notifyingsail_and_abstractnotifyingsail
- Реализовать для задания из п.3 с помощью Mockito mock-объект типа SailChangedListener и подключить его к тестируемому RDF репозиторию. Проверить, что метод sailChanged() вызывается хотя бы раз в тесте с данными, проходящими валидацию и не вызывается ни разу в тесте с некорректными данными.
- Реализовать ArgumentCaptor типа SailChangedEvent для метода sailChanged() mock-объекта. Проверить, что передаваемое в метод sailChanged() mock-объекта событие возвращает true при вызове statementsAdded().
- Установка
- Скачать Apache Karaf и запустить его в отдельном окне консоли.
- Склонировать репозиторий agentlab/karaf-rest-example
- Открыть отдельную консоль (или открыть Eclipse), собрать в консоли (или Eclipse) склоненный репозиторий с помощью Maven и в консоли запущенного Karaf задеплоить собранные артефакты в соответствии с инструкцией agentlab/karaf-rest-example/README.md
- Проверить, что по ссылке http://localhost:8181 выдается справка о создании веб-сервиса, а по ссылке http://localhost:8181/booking веб-сервис возвращает пустой список.
- Настроить Karaf на мониторинг локального Maven-репозитория с помощью команды bundle:watch *
- Исследование работы веб-сервиса в Karaf
- Добавить в компонент метод-активатор, который выводит отладочную строку "BookingServiceRest Started" в консоль (System.out.println) и добавляет тестовые данные в bookings. Добавить в метод-деактиватор отладочный вывод строки "BookingServiceRest Stopped". См. Документация на аннотации компонентов OSGi
- Пересобрать проект Maven и проверить, что Karaf сделал редеплой
- С помощью get запроса по ссылке http://localhost:8181/booking из браузера проверить, что веб-сервис возвращает введенные данные в JSON.
- Исследование работы OSGi компонентов
- Создать OSGi DS компонент (обычный, не веб-сервис) SeatsChecker, позволяющий проверить по номеру рейса, есть ли там места (использовать в качестве тестовой реализации генератор случайных чисел). Для этого создать в проекте karaf-rest-api интерфейс SeatsChecker, а в проекте karaf-rest-whiteboard класс SeatsCheckerImpl с реализацией интерфейса и аннотацией @Component.
- Связать с помощью поля и аннотации @Reference компонент BookingServiceRest и компонент SeatsChecker так, чтобы BookingServiceRest каждый раз при добавлении регистрации на рейс проверял наличие свободных мест.
- Добавить в компонент активатор и деактиватор с тестовым выводом.
- Пересобрать и проверить работу.
- Проверить, работу policy=dynamic в связи @Reference и модифицировать BookingServiceRest, чтобы он работал при отсутствии сервиса SeatsChecker.