Rust基础集成测试遇模块导入错误:无法解析mymod模块
Rust测试模块导入错误排查与解决
问题场景
项目实现了基础运算功能,cargo run可正常执行,但运行cargo test时触发模块解析错误,提示无法找到mymod模块,尝试多种use导入方式均未解决。
问题根源
- 测试crate的独立性:tests目录下的测试文件是作为独立crate编译的,不属于src主crate的内部模块体系,因此无法直接引用src中的私有模块。
- 模块可见性不足:src/main.rs中声明的
mod mymod和mod mysub是私有模块,外部crate(测试crate)无权访问。 - 导入路径错误:测试文件未通过项目的crate名(
sample01)来定位主crate中的公共模块。
解决方法
步骤1:将src中的模块设为公共可见
修改src/main.rs,把私有模块声明改为公共模块,让测试crate能访问:
pub mod mymod; pub mod mysub; use mysub::mysub; use mymod::operations::{mysum, mymul}; pub fn mydiv(x: i32, y: i32) -> i32 { x/y } fn main() { println!("my operators: 6, 2"); let s:i32 = mysum(6,2); let m:i32 = mymul(6,2); let d:i32 = mydiv(6,2); let sb:i32 = mysub(6,2); println!("The value of the sum is: {s}"); println!("The value of the mul is: {m}"); println!("The value of the div is: {d}"); println!("The value of the sub is: {sb}"); }
步骤2:在测试文件中通过crate名导入目标函数
修改tests/mymod_test.rs,使用项目crate名sample01作为根路径导入mysum:
use sample01::mymod::operations::mysum; #[test] fn test_sum() { let s:i32 = mysum(2,3); assert_eq!(s, 5); }
验证
执行cargo test,测试即可正常编译并运行。若需测试其他函数(如mysub、mydiv),同样通过sample01::mysub、sample01::mydiv的路径导入即可。
内容的提问来源于stack exchange,提问作者mvcorrea
相关产品推荐
相关产品推荐

