Skip to content

Библиотека для проверки решений задач на PHP

Notifications You must be signed in to change notification settings

codedokode/task-checker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Task Checker

Build status

Библиотека для написания тестов для проверки решений задач на PHP. Пока на этапе демо-версии.

Пример теста можно увидеть в cli/run-test/scenario.php, в той же папке находятся примеры программ, которые проверяет этот тест.

Установка

Необходимо выполнить команду composer install.

Запуск в командной строке

Для демонстрации работы библиотеки используется скрипт cli/run-test.php, которому надо передать в аргументах файл сценария проверки и файл с проверяемой программой. Результаты проверки выводятся в консоль. Используется PHP 5.4+. Пример команды:

php cli/run-test.php cli/run-test/scenario.php cli/run-test/program1.php

Программа выводит в консоль текст в кодировке utf-8. Если под Windows этот текст не отображается, его можно сохранить в файл (дописав > result.txt к команде) и просмотреть файл редактором.

Запуск веб-приложения

У приложения имеется веб-интерфейс. Чтобы его увидеть, необходимо запустить встроенный в PHP веб-сервер командой:

php -S 127.0.0.1:9001 -t public public/index.php

После этого можно будет открыть в браузере страницу http://127.0.0.1:9001/ и увидеть список задач.

Юнит-тесты

В библиотеке есть несколько юнит-тестов, тестирующих внутренние компоненты библиотеки. Для их запуска необходимо использовать phpunit (проверено на phpunit 5.7), выполнив команду:

php phpunit.phar .

Разработка

В файле draft/syntax-ideas.php находятся разные идеи по ситаксису сценариев проверки.

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

К сожалению, в коде наблюдается нехватка комментариев. Принцип работы можно понять по скрипту cli/run-test.php. Создается объект-тестировщик, ему передается сценарий проверки, проверяемая программа, проводится проверка. На выходе получается отчет о проверке в объекте Report, который затем печатается.

Используется немного запутанная система DI, которая позволяет подключать модули внутри сценария проверки с помощью конструкций вида $this->moduleName, например, $this->assert создает объект класса Module\Assert. Идея взята из фреймворка Codeception.

Общая структура кода:

cli/               # Скрипты командной строки
public/            # Публичная папка веб-сервера
scenarios/         # Сценарии проверки задач
server/            # Конфигурация и код веб-приложения
src/
    Codebot/       # Заглушка, выполняющая код программы с помощью eval
    Errors/        # Объекты ошибок, обнаруживаемые тестами. Используются
                     для построения отчета о проверке
    Module/        # Модули, которые будут доступны внутри сценария 
                        проверки
    Promise/       # Внутренняя реализация Promise
    Reporter/      # Классы для сборки и вывода отчета о проверке
            Report.php    # Класс для сборки отчета. Отчет состоит из 
                              шагов, каждый из которых представлен отдельным 
                              объектом Step\Step. Шаги могут быть вложены 
                              друг в друга.
    Step/          # Классы, описывающие шаги теста
    Test/          # Классы, описывающие объект-тестировщик, проверяющий 
                      программу
    TextReader/    # Разбирает используемые в сценарии проверки выражения
    TextScanner/   # Классы для обработки и замены фрагментов кода на PHP, 
                        используются для подстановки значений переменных 
                        в программу.
    Util/
    Web/           # Классы, используемые в веб-приложении
    ModuleFactory.php    # Реализует DI в объекте-тестировщике
templates/         # Шаблоны страниц веб-приложения
tests/             # Автоматизированные тесты
  Helper/          # Вспомогательные классы для тестов

Сценарии проверки задач

Сценарии проверки хранятся в папке scenarios. Структура примерно такая:

scenarios/
        hello-world/          - идентификатор задачи (hello-world)
                  tester.php  - скрипт проверки решения
                  /fail/      - примеры неправильных решений
                      example1.php 
                      example2.php 
                  /pass/      - примеры правильных решений
                      example1.php
                      example2.php

Специальный тест (ScenariosIntegrationTest) тестирует все задачи и все варианты решений к ним, проверяя, что правильные решения проходят тест, а неправильные - нет.

Описания задач (названия, подсказки, и т.д.) хранятся в файле scenarios/problems.json. Этот файл автоматически генерируется из HTML страниц учебника со специальной HTML микроразметкой, которая описана в файле docs/problem-markup.md. Скрипты генерации находятся в папке cli.

About

Библиотека для проверки решений задач на PHP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published