Files
dht/TESTING.md
T

51 lines
1.9 KiB
Markdown

# 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 运行只用于流程冒烟
## 默认验证命令
```powershell
$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
```