Rust 如何编写测试
原理:执行 cargo test 会生成二进制文件 -> 入口函数 -> 生成 main 函数, main 函数里包含 (#[test], + tests 目录下 + 注释下测试),其中 tests 目录,会执行集成测试 默人是并行运行,起很多线程并行运行每个测试 如果想要串行运行: cargo test –thread_num=1 背后其实是执行命令: rustc –test src/lib.rs 告诉 rustc 生成一个运行所有单元测试的二进制文件, (启用 cfg, 放入 main 函数)
cargo test RUST_TEST_THREADS=1
fn sum(a: i8, b: i8) -> i8 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[ignore]
fn it_works() {
assert_eq!(crate::sum(2, 2), 4);
}
}
执行忽略测试
cargo test -- --ignored
集成测试: 测试被测试的代码能够一起工作, 平行于 src 目录,也就是黑盒测试 tests 目录下的每一个文件都是一个独立的 crate
如果项目是binary crate, 只含有 src/main.rs, src/lib.rs(因为它就是 crate)
编写可测试 —> 反过来推动我们编写测试 //src/main.rs -> 只会存在几行代码 -> src/lib.rs 里面的方法 所有的核心代码都存放在 src/lib.rs // 方便进行集成测试
//单元测试 + 集成测试 , src/main.rs 只有几行
//单元测试 -> 促使我们写出可测试代码(简洁的代码)
基准测试(性能测试)
Mock 测试 Fuzzing 测试
- 什么是 Mock?打脏
外部接口没有准备好,需要 mock, 一般需要通过 trait
mockall 依赖