主题
验证与测试
测试分层
| 层级 | 目标 |
|---|---|
| 单元测试 | 数据结构、Serde、表达式和局部原语 |
testkit 行为测试 | 在最小白板盘面验证单卡主效果与边界 |
| 完整卡池测试 | 用生产 Catalog 装配全部卡面和效果 |
| 端到端规则对局测试 | 从两副 39 张构筑经过换牌和多回合动作 |
| 快照/回放测试 | 版本、指纹、篡改拒绝和逐步确定性 |
| 审计测试 | 卡牌效果、Script、token、行为契约与引用覆盖 |
测试绿只能证明被覆盖的项目裁决被稳定执行。缺少官方运行时证据的细节仍应在行为账本中 标为 bounded_partial 或 blocked,不能仅因测试通过升级为已确认。
常用命令
聚焦测试:
powershell
cargo test -p kards-core --manifest-path engine/Cargo.toml runtime_match
cargo test -p kards-core --manifest-path engine/Cargo.toml diy_pack
cargo test -p kards-core --manifest-path engine/Cargo.toml restoration_round9最终门禁:
powershell
cargo fmt --all --manifest-path engine/Cargo.toml -- --check
cargo test -p kards-core --manifest-path engine/Cargo.toml涉及状态、loader、公共行为或结算管线时,不能只跑聚焦测试。
必测不变量
- 所有牌实例只存在于一个合法区域;
- 战场实体、牌实例与所有者引用有效;
- 棋盘序列和实体 arena 一致;
- Pending 决策方、候选与续算上下文一致;
- 已结束对局没有遗留 Pending;
- 卡池中的
DefId与状态引用匹配; - 合法动作在提交时重新验证;
- 错误步骤不改变原状态;
- 克隆状态加同一动作不会漂移随机数。
逐卡行为账本
行为契约把“卡名在测试里出现”与“主效果被断言”分开:
behavior_source记录 declarative、script、rule overlay、native、白板或缺失;coverage_level区分引用、主效果、边界、受限覆盖和阻塞;tests指向精确测试函数;consumers指向实际消费效果的源码位置。
非空卡文不能以未分类空效果通过。空文本白板可明确登记为 whiteboard,但不会伪造成 已实现效果。
确定性产物
覆盖率报告和文档站应连续生成两次,比较文件清单、字节和 SHA-256。生成脚本不得写入 当前时间或依赖未排序目录遍历;若两次输出不同,应先定位非确定来源再发布。