PackTest
Активный0.0
Установок
Последнее обновление
Версии
PackTest
PackTest открывает перед разработчиками возможность создавать игровые тесты непосредственно в датапаках. Тесты представляют собой файлы *.mcfunction, размещённые в специальной папке test. Этот инструмент идеально подходит для проверки работоспособности пользовательских датапаков.
Пример использования
data/example/test/foo.mcfunction
#> Призывает бронестойку и проверяет её наличие
# @template example:small_platform
# @optional
summon armor_stand ~1.5 ~1 ~1.5
execute positioned ~1.5 ~1 ~1.5 run assert entity @e[type=armor_stand,dx=0]
assert predicate example:test
setblock ~1 ~1 ~1 grass_block
execute if block ~1 ~1 ~1 stone run succeed
fail "О нет"
Асинхронное тестирование
Тестовые функции поддерживают асинхронное выполнение с использованием ключевого слова await!
setblock ~ ~ ~ stone
summon item ~ ~6 ~
await entity @e[type=item,distance=..2]
await delay 1s
data merge entity @e[type=item,distance=..2,limit=1] {Motion: [0.0, 0.01, 0.0]}
Запуск тестов
Тесты можно запускать непосредственно в игре с помощью команды test:
test runall— запускает все доступные тестыtest runall <пространство_имён>— выполняет тесты из указанного пространства имёнtest run <тест>— запускает конкретный тест по имениtest runfailed— повторяет все ранее проваленные тестыtest runthis— запускает ближайший тестtest runthese— выполняет все тесты в радиусе 200 блоков
Автоматический сервер тестирования
Тесты также могут запускаться автоматически, например, в среде непрерывной интеграции. При установке параметра -Dpacktest.auto игровой тестовый сервер автоматически запускается с загруженными тестами. Процесс завершается после выполнения всех тестов, а код выхода соответствует количеству неудачных тестов.
Параметр -Dpacktest.auto.annotations генерирует аннотации GitHub для всех ошибок тестирования и проблем с загрузкой ресурсов.
Команды тестирования
fail
fail <текстовый_компонент>— завершает текущий тест с ошибкой и выходит из функции
succeed
succeed— всегда завершает текущий тест успешно и выходит из функции
assert
assert <условие>— если условие не выполняется, завершает тест с ошибкойassert not <условие>— если условие выполняется, завершает тест с ошибкой
await
await <условие>— аналогично assert, но повторяет проверку каждый тик до успеха или таймаутаawait not <условие>— повторяет проверку до тех пор, пока условие не перестанет выполнятьсяawait delay <время>— ожидает указанное количество времени с единицей измерения
Условия проверки
block <позиция> <блок>— проверяет соответствие блока на указанной позицииdata ...— проверяет NBT данные с использованием синтаксисаexecute if scoreentity <селектор>— проверяет наличие сущностей по селекторуpredicate <предикат>— проверяет предикат в датапакеscore ...— проверяет очки с использованием синтаксисаexecute if scorechat <шаблон> [<получатели>]— проверяет соответствие сообщения в чате регулярному выражению
Тестовые игроки (манекены)
Искусственные игроки создаются с помощью команды /dummy. Манекены не сохраняют данные на диск и не загружают скины.
Основные команды управления манекенами:
dummy <имя> spawn— создаёт нового манекенаdummy <имя> respawn— возрождает манекена после смертиdummy <имя> leave— удаляет манекена с сервераdummy <имя> jump— заставляет манекена прыгнутьdummy <имя> sneak [true|false]— включает/выключает режим скрытностиdummy <имя> sprint [true|false]— включает/выключает спринтdummy <имя> drop [all]— выбрасывает предмет из рукиdummy <имя> swap— меняет местами предметы в рукахdummy <имя> selectslot— выбирает другой слот на панели быстрого доступаdummy <имя> use item— использует предмет в рукеdummy <имя> use block <позиция> [<направление>]— использует предмет на блокеdummy <имя> use entity <сущность>— использует предмет на сущностиdummy <имя> attack <сущность>— атакует сущностьdummy <имя> mine <позиция>— добывает блок
Директивы тестирования
Тесты можно настраивать с помощью специальных комментариев в начале функции:
@template— указывает шаблон структуры для теста (по умолчанию пустая структура 1x1x1)@timeout— задаёт таймаут теста (по умолчанию 100)@optional— разрешает неудачное завершение теста (по умолчанию false)@dummy— создаёт манекена в начале теста и устанавливает@sна него@batch— имя группы тестов (по умолчанию packtestBatch)@beforebatch— команда для выполнения перед группой тестов@afterbatch— команда для выполнения после группы тестов