🕵️ 调试工具#
调试是软件开发的基本环节。Bookshelf 提供多种工具帮助有效识别和解决问题。
🧪 单元测试#
测试对确保代码正确性和预防未来错误至关重要。本项目使用 Misode 的 Minecraft Fabric 模组 PackTest 进行测试。
⚙️ 运行测试#
运行测试有两种方式:
Headless Mode: We provide a simple command
uv run modules testthat allows you to run the tests headlessly, without having to open the game游戏内运行:下载并安装 Minecraft Fabric 模组,完成后可在游戏内使用测试命令运行测试
需要 Java
请确保系统已安装 Java,这是命令运行的必要条件。
✍️ 编写测试#
每个测试都是 test 文件夹内的 .mcfunction 文件。编写测试时,请清晰定义测试内容及预期结果。还应包含边界案例,确保代码能处理所有可能的输入情况。
🛠️ 自定义命令#
PackTest 提供多种命令控制测试流程、验证条件并与 Minecraft 环境交互:
测试流程命令:
fail [<文本>]:立即终止当前测试并记录可选信息succeed:立即通过当前测试assert <条件>:若条件为假则测试失败assert not <条件>:若条件为真则测试失败await <条件>:持续检查条件直至成功或超时await not <条件>:等待条件变为假await delay <时间>:暂停测试指定时长
条件类型:
block <位置> <方块>:检查指定位置的方块是否匹配给定方块data <路径>:使用标准 Minecraft 数据语法验证 NBT 数据entity <选择器>:验证实体是否匹配选择器(突破测试边界有效)predicate <谓词>:执行数据包中的谓词score <目标>:使用 Minecraft 基于分数的条件比较分数chat <模式> [<接收者>]:使用正则表达式匹配聊天消息
🧍 玩家模拟器#
PackTest 允许生成和控制“模拟器”(dummies),即用于测试的模拟玩家:
dummy <名称> spawn:生成新模拟器dummy <名称> respawn:被杀死后重生模拟器dummy <名称> leave:让模拟器离开服务器dummy <名称> jump:让模拟器跳跃dummy <名称> sneak [true|false]:让模拟器持续按住或松开 Shift(不同于当前蹲伏状态)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:测试使用的结构模板资源位置,默认为minecraft:empty(1×1×1空结构)@timeout:指定超时的整数,默认100@optional:是否允许测试失败,默认false(无值时视为true)@skyaccess:测试是否需要天空视野,默认false(将在测试区域上方放置屏障方块)@dummy:是否在测试开始时生成模拟器并将@s设为该模拟器,位置默认~0.5 ~ ~0.5
了解更多…
如需更多信息,请访问 Misode 的仓库获取编写测试的详细指南。
📦 模块#
Bookshelf 包含多种模块,旨在提升开发体验。
📄 日志记录#
集中化并简化日志管理,便于项目监控和故障排查。详情参见日志模块文档。
🔬 变量输出#
提供随时显示分数或存储值的便捷方式,辅助调试和追踪。详情参见输出模块文档。