Rust需在main.rs声明mod tests才能运行单元测试?是规范还是配置问题?
问题描述
本人有其他编程语言开发背景,在Rust项目中发现一个现象:必须在main.rs中添加特定代码声明,src/tests/目录下的单元测试才能被cargo test检测并正常运行;如果移除该声明,测试就无法执行。想知道这是Rust的标准规范,还是我遗漏了相关配置?
项目结构:
src/ -- config/ -- models/ -- services/ -- tests/ <-- 此处存放测试的mod.rs main.rs
需添加的代码:
#[cfg(test)] mod tests;
解答
这是Rust模块系统的标准行为,不是你漏了配置,具体说明如下:
- Rust的模块遵循树状结构,
main.rs是项目的根模块,只有被根模块(或其下属子模块)显式引入的子模块,才会被编译器纳入编译范围。src/tests/作为src/下的子目录,对应的模块不会自动被根模块识别,必须通过mod tests;声明来引入。 #[cfg(test)]属性的作用是限定编译时机:只有在执行cargo test命令时,才会编译这个测试模块,避免测试代码混入生产环境的编译产物中。- 如果你不想在
main.rs中添加这行声明,可以更换测试组织方式:将tests/目录放在项目根目录(与src/同级),这种目录下的测试属于「集成测试」,Cargo会自动识别并编译,无需手动引入模块。
内容的提问来源于stack exchange,提问作者Mason A
相关产品推荐
相关产品推荐

