# Assert 使用策略 ## 范围 - 仅用于不可恢复的内部不变量破坏。 - 不用于用户可构造输入导致的常规错误。 - 术语口径见 `../../shared/terminology.md`。 ## 判定规则 - 输入错误可恢复:返回 false/NULL,并保证资源回收。 - 内存破坏或结构破坏不可恢复:允许 assert(启用 `RyanJsonEnableAssert` 时)。 - Compare 内部对象链/Key 不变量属于结构破坏范畴,可按 assert 路径处理,不要求业务输入可达覆盖。 ## 测试策略 - 单元测试验证“可恢复错误”返回路径。 - fuzzer 避免把业务预期写成 assert。 - 对 assert 路径,重点确认是否误分类。 ## 常见误用 - 用 assert 拦截重复 key、非法数字、非法字符串输入。 - 以 assert 代替失败路径释放逻辑。 ## 依据(仓库内) - `RyanJson/RyanJson.h`:断言宏与公开语义注释 - `RyanJson/RyanJsonItem.c`:失败路径与可恢复错误返回 - `test/unityTest/cases/core/testCreate.c`、`test/unityTest/cases/core/testReplace.c`