SuperAPI AI 工具集

rust-unit-tests

编程与开发

查看项目

更新于 10-16 05:46

技能介绍

用途:在 warp 的 Rust 代码库中编写、改进和运行 crate 级单元测试,强调增量、范围明确、每个用例只验证一个函数或行为。

主要能力与原则:确定性且无需启动应用即可触达的逻辑优先写单元测试,如解析、编码、转义等纯数据转换,领域逻辑与状态机,边界与异常输入,错误路径,以及可在此层复现的缺陷修复。测试应通过公共 API 验证行为,断言状态而非调用交互;一个测试只测一个行为并按行为命名;测试体保持完整简洁,优先重复而非间接抽象;测试内不写条件、循环、算术或字符串拼接来计算期望值;用 assert_eq!/assert_ne! 获得可读差异,必要时补充说明信息。

文件组织:单元测试放在 ${filename}_tests.rs 或 mod_test.rs 中,并在对应源文件末尾以 #[cfg(test)] 与 #[path = "..."] mod tests; 引入。

适用场景与限制:需要真实 PTY、shell、窗口或显示器的行为,组件间接线问题,真实 IO 或跨进程时序,或只能靠为测试新增 trait 与间接层才能测试的代码,应升级到 gui-integration-test、tui-testing 等更高层测试;不要写变更检测型测试、无逻辑的平凡代码测试、对标准库或第三方库本身的测试、冗余测试,也不要追求覆盖率数字。测试需保持确定性:不读系统时钟、不用 sleep 等待、不依赖执行顺序与共享状态,必要时用 serial_test 的 #[serial] 或 #[ignore] 隔离。异步逻辑在需要运行时用 #[tokio::test],否则优先 App::test。

常用辅助:TerminalModel::mock(..)、simulate_block(..)、TestBlockListBuilder/TestBlockBuilder、VirtualFS::test、FeatureFlag::X.override_enabled(..)、assert_lines_approx_eq! 等;注意减少 model.lock() 嵌套。

运行与检查:cargo nextest run --no-fail-fast --workspace --exclude command-signatures-v2;单 crate 用 cargo nextest run -p <crate_name>;按名称过滤用 cargo nextest run -E 'test(<substring>)';文档测试用 cargo test --doc;提交前运行 ./script/format 与 cargo clippy --workspace --all-targets --all-features --tests -- -D warnings,完整本地检查可运行 ./script/presubmit。