Unsafe Rust 怎么测:不变量、FFI 契约与目标平台回归
Unsafe Rust 怎么测:不变量、FFI 契约与目标平台回归
先把问题落到具体对象
Unsafe 代码的测试要围绕它承诺的不变量展开。单元测试能查边界,FFI 和分配器契约还需要集成测试,架构相关行为则必须回到目标平台。
测试分层怎么做
单元层覆盖空指针、长度、对齐和别名条件;集成层验证 C ABI、释放方、回调生命周期和 panic 边界;目标平台回归检查不同优化级别与架构。Miri 和 sanitizer 能提供额外线索,但不能代替契约审查。
测试顺序
- 从安全封装入口验证空指针、长度、对齐和别名条件,拒绝路径也要有断言。
- 在 FFI 集成测试中明确由哪一侧分配、释放,回调可以存活多久,panic 如何隔离。
- 分别运行 Miri、可用的 sanitizer 和普通测试,记录各工具能覆盖的范围。
- 涉及 ABI、原子操作或架构特性的代码,最后回到支持的目标平台和优化级别回归。
交付前检查
失败应能回到具体不变量或外部契约。所有 Unsafe 块都要有安全封装的测试入口。
适用边界
工具通过不等于 Unsafe 契约成立。测试无法穷尽的对齐、别名和生命周期条件,仍需写在安全封装的接口约定中。