53 lines
2.0 KiB
Markdown
53 lines
2.0 KiB
Markdown
# Rust 测试分层约定
|
|
|
|
本文档说明测试应该放在哪里以及每一层允许依赖什么
|
|
|
|
## 单元测试
|
|
|
|
单个规则私有状态机编码函数和边界计算使用源码文件底部的 `#[cfg(test)] mod tests`
|
|
|
|
单元测试可以通过 `use super::*` 访问当前模块私有实现 但不应跨多个业务模块组装完整应用
|
|
|
|
当前示例包括 Metadata 限制 路径校验 内容组代表选择 响应限流和查询分位数
|
|
|
|
## 组件测试
|
|
|
|
需要模块私有装配状态的组件测试保留在对应模块中
|
|
|
|
例如 Axum router 测试需要私有 `ApiState` 和测试用验证入口 因此与 `api` 模块放在一起而不是为了目录形式公开内部 API
|
|
|
|
RocksDB adapter 测试需要验证原子批处理私有键空间租约和损坏状态 因此保留在 `storage::rocks` 内部
|
|
|
|
SQLite 诊断组件测试需要验证 WAL 持久化分钟合并保留清理和 writer 关闭 因此保留在 `diagnostics` 模块内部
|
|
|
|
## 集成测试
|
|
|
|
只使用 crate 公开 API 的跨层契约放在 crate 根目录 `tests/`
|
|
|
|
`src/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
|
|
```
|