Репозиторий с таблицами и интерпретатор тестов
Добрался-таки до слияния репозиториев, до этого момента таблицы у меня жили в одном репозитории, а дневник разработчика - в другом. Теперь за все отвечает один репозиторий, вот ссылка.
Заодно еще и заменил разделители столбцов в файлах таблиц, теперь использую запятую, а не точку с запятой. Это дало возможность красиво рендерить таблицы в веб-интерфейсе GitHub, к тому же в постах я теперь смогу ссылаться на конкретные файлы / gists, и они тоже будут красиво отформатированы.
А еще хочется рассказать про инструмент, которым я пользуюсь для проверки своих таблиц, но сначала придется рассказать еще и про табличные тесты.
Таблицы принятия решений состоят из двух частей: условий и действий. Интерпретатор таблиц обычно проверяет все условия, а затем выполняет только те действия, которые соответствуют удовлетворенным правилам. А если сначала выполнить действия, а затем проверить условия? Получится табличный тест.
Получается, что один и тот же синтаксис можно использовать как для описания логики, так и для фиксации тестовых сценариев. Ну и написать инструмент, который будет выполнять табличные тесты, иначе говоря, будет интерпретировать таблицы как тесты.
Базовый табличный тест выглядит так:
Для тестов мне понадобилось добавить к базовым типам строк
таблицы еще один тип - EXE
(от execute). В примере таких строк две, они содержат указания выполнить разные действия.
В первом столбце первой строки стоит значение include
, движок тестов интерпретирует это как
указание выполнить все действия из другого тестового файла. Таким образом я могу переиспользовать
в любых тестах состояния, полученные в других тестах или вспомогательных файлах. В этом примере
тест сначала выполняет действия, создающие игровой стол для трех игроков.
Во второй строке в первом столбце стоит значение command
, это указание выполнить команду,
описанную в каком-то файле таблиц. В данном случае это команда инициализации игры, которая
подготавливает игровой стол к началу партии - рассаживает игроков, выдает им стартовые ресурсы,
и так далее.
Следующие две строки тоже относятся к созданию предварительных условий для теста, они
устанавливают текущего игрока и задают состояние роли “Поселенец”. Эти строки имеют тип ASG
,
то есть они изменяют состояние системы.
Последняя строка - это собственно проверка теста. Это строка с типом CND
, в данном примере она
проверяет, что действие “Выбрать роль Поселенца” доступно. Если это условие выполнено, то тест
считается пройденным.
Интерпретатор тестов - это отдельное веб-приложение, которое “смотрит” на папку с таблицами и тестами, прогоняет тесты и отображает результаты. Интерпретатор пока очень сырой в плане интерфейса и возможностей, но его базовых способностей вполне достаточно для оценки правильности таблиц. Его исходники расположены в отдельном репозитории.