单元测试全绿,上线却报错——这种糟心事几乎每个程序员都遇到过。Rust的集成测试机制,正是为了提前拦住这类问题而设计的。
与单元测试不同,集成测试完全游离于被测库之外。它们像普通用户代码一样调用库的公开API,专门验证多个模块协作时是否掉链子。单元测试关注的是"每个零件是否合格",集成测试追问的是"组装起来能不能跑"。
打开网易新闻 查看精彩图片
在Rust项目里搭建集成测试很简单:在src同级目录新建tests文件夹,cargo会自动识别其中的测试文件。每个.rs文件会被当作独立的crate编译,这意味着你必须显式导入要测的库——比如use RustStudy;——才能开始写测试。
这里有个细节值得注意。假设你的lib.rs里有个pub fn add_two和一个私有的internal_adder,集成测试文件只能碰add_two。想测内部实现?那是单元测试的活儿。这种权限隔离看似麻烦,实则逼你站在真实调用方的视角设计测试。
测试代码的写法也更清爽:不需要#[cfg(test)]包裹,直接#[test]标注函数即可。因为cargo test执行时,tests目录下的代码天然只在测试场景运行。
覆盖集成测试之所以重要,是因为"能单独工作"和"能协同工作"完全是两码事。Rust把这两种测试物理隔离到不同目录,本质上是在工程层面强制你区分关注点——这个设计哲学,比语法细节更值得琢磨。
热门跟贴