

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 score
entity <селектор>
— проверяет наличие сущностей по селекторуpredicate <предикат>
— проверяет предикат в датапакеscore ...
— проверяет очки с использованием синтаксисаexecute if score
chat <шаблон> [<получатели>]
— проверяет соответствие сообщения в чате регулярному выражению
Тестовые игроки (манекены)
Искусственные игроки создаются с помощью команды /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
— команда для выполнения после группы тестов