316 字
2 分钟
配表也是代码:OpenRA 的测试与 Lint 双保险
引擎测试:OpenRA.Test
OpenRA.Test/ 里按模块分了测试集,打开一看全是基本功:
MiniYamlTest/FieldLoaderTest/FieldSaverTest:配表解析与回写的 round-trip,改解析器不丢数据CPosTest/CoordinateTest:格子坐标、像素坐标、亚格子坐标互转——RTS 里坐标错 1 像素,单位就卡墙里ColorTests、FluentTest、ActorInfoTest:颜色、本地化、单位装配,各管一摊
坐标和配表解析被重点照顾,一点不意外:这是引擎里错一次、全盘崩的两处。
配表 Lint:策划的编译器
OpenRA.Mods.Common/Lint/ 是我最想抄的一套:
CheckUnknownTraitFields:Trait 名拼错、字段写错直接报错CheckTraitPrerequisites:前置条件缺失(比如挂了武器没挂弹药)提前揪出CheckTraitLocation:Trait 放错位置(只能挂建筑的挂到了步兵上)拦下
策划改几千行 YAML,进游戏前先过 Lint,等于给配表配了个“编译器”。我们之前 apktool 项目里缺的就是这环,深有体会。
我的收获
- 测试分层:引擎逻辑用单元测试,数据内容用 Lint,各扫各的门前雪
- 高风险点重点投:坐标、序列化、配表解析,值得用测试集围起来
- 开源协作靠门禁:
make test+ CI 全绿才合入,人一多就知道香了