
?️ 如何查看 Cargo 测试覆盖率
1. 使用 cargo-tarpaulin
cargo install cargo-tarpaulin
在项目根目录下运行以下命令,即可生成覆盖率报告:
cargo tarpaulin
target/cov/index.html
。打开这个文件,你可以看到每一行代码的覆盖情况,绿色表示已覆盖,红色表示未覆盖。2. 使用 grcov
cargo install grcov
首先,需要在编译时启用覆盖率检测:
RUSTFLAGS="-C instrument-coverage" cargo test
grcov . -s . --binary-path ./target/debug/ -t html --ignore tests/ -o ./target/debug/coverage/
target/debug/coverage
目录下。3. 工具对比与选择
? 2025 最新 Rust 项目质量优化技巧
1. 基准测试与性能分析
use criterion::{black_box, criterion_group, criterion_main, Criterion};
fn bench_function(c: &mut Criterion) {
c.bench_function("my_benchmark", |b| b.iter(|| black_box(my_function())));
}
criterion_group!(benches, bench_function);
criterion_main!(benches);
cargo bench
即可执行基准测试。2. 并行化与 SIMD 优化
par_
前缀即可启用并行:use rayon::prelude::*;
let data: Vec<u64> = (..1_000_000).collect();
let sum: u64 = data.par_iter().sum();
i32x4
,来实现向量化计算。3. 内存管理优化
- 避免堆分配:尽可能使用栈分配的数据结构,如数组和元组,减少不必要的堆内存分配。
- 使用对象池:对于频繁创建和销毁的对象,使用对象池可以显著减少内存分配的开销。
use std::cell::RefCell;
use std::rc::Rc;
struct ObjectPool<T> {
objects: RefCell<Vec<T>>,
factory: Box<dyn Fn() -> T>,
}
impl<T> ObjectPool<T> {
fn new(factory: Box<dyn Fn() -> T>) -> Self {
ObjectPool {
objects: RefCell::new(Vec::new()),
factory,
}
}
fn get(&self) -> T {
self.objects.borrow_mut().pop().unwrap_or_else(|| (self.factory)())
}
fn return_obj(&self, obj: T) {
self.objects.borrow_mut().push(obj);
}
}
- 优化内存分配器:对于高性能要求的场景,可以自定义内存分配器,例如使用 jemalloc 或 tcmalloc。
4. 编译器优化选项
[profile.release]
opt-level = # 最高优化级别
codegen-units = # 减少并行编译单元,提高优化效果
lto = true # 启用链接时优化
5. 异步编程优化
use tokio::net::TcpStream;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut stream = TcpStream::connect("127.0.0.1:8080").async?;
let mut buffer = [; ];
stream.read(&mut buffer).await?;
stream.write_all(&buffer).await?;
Ok(())
}
if let Some(a) = value1 && let Some(b) = a.get_value() {
// 处理 a 和 b
}
6. 代码静态分析与 lint 规则
[dev-dependencies]
clippy = "0.1.0"
cargo clippy --all-targets -- -D warnings
7. 持续集成与质量门禁
name: Test and Coverage
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
- run: cargo test
- run: cargo tarpaulin --fail-under 80 # 设置覆盖率阈值为 80%