1.9 KiB
1.9 KiB
Rust 测试分层约定
本文档说明测试应该放在哪里以及每一层允许依赖什么
单元测试
单个规则私有状态机编码函数和边界计算使用源码文件底部的 #[cfg(test)] mod tests
单元测试可以通过 use super::* 访问当前模块私有实现 但不应跨多个业务模块组装完整应用
当前示例包括 Metadata 限制 路径校验 内容组代表选择 响应限流和查询分位数
组件测试
需要模块私有装配状态的组件测试保留在对应模块中
例如 Axum router 测试需要私有 ApiState 和测试用验证入口 因此与 api 模块放在一起而不是为了目录形式公开内部 API
RocksDB adapter 测试需要验证原子批处理私有键空间租约和损坏状态 因此保留在 storage::rocks 内部
集成测试
只使用 crate 公开 API 的跨层契约放在 crate 根目录 tests/
dht-search/tests/storage_search_flow.rs 从外部组合领域模型 RocksDB repository 和 Tantivy search 验证写入索引查询关闭重开和恢复
集成测试不得依赖 pub(crate) 或为测试扩大生产 API 可见性
端到端和运行测试
真实 DHT 网络长时间运行远程部署和浏览器交互依赖外部环境 不放入默认 cargo test
这类测试的条件命令结果和验收结论记录到 TODOS.md BENCHMARKS.md 或部署文档
性能基准
可重复的规模测量使用独立 dht-benchmark 二进制
基准模块按参数数据集工作负载采样报告和编排拆分 单元测试只验证确定性生成分位数退避和格式化规则
性能结论必须来自 release 构建 默认 debug 运行只用于流程冒烟
默认验证命令
$env:LIBCLANG_PATH = "$PWD\.tools\libclang\clang\native"
cargo fmt --all --check
cargo test --workspace --all-targets --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings