Rust集成测试无法导入src目录下add_two函数的问题
解决Rust集成测试无法导入项目函数的问题
问题原因
tests目录下的集成测试文件是独立的Rust crate,和主项目完全分离。你用crate::add_two::add_two;导入时,crate::指向的是测试crate本身,而非你的主项目,因此找不到目标函数。
解决方案
方案一:直接修改集成测试的导入语句
修改tests/integration_test.rs中的导入代码,用主项目的crate名称(即Cargo.toml里的name字段tutorial1)来引用:
use tutorial1::add_two::add_two; #[test] fn add_two_with_two() { assert_eq!(add_two(2), 4); }
方案二:改用Library + Binary的规范结构(推荐)
这种方式更符合Rust项目最佳实践,将核心逻辑放在library crate中,binary crate仅作为入口调用library:
- 创建
src/lib.rs文件,内容如下:
pub mod add_two;
- 修改
src/main.rs,移除内部的pub mod add_two;,改为从library导入:
use tutorial1::add_two::add_two; fn main() { // 可选:添加测试逻辑 println!("2 + 2 = {}", add_two(2)); } #[cfg(test)] mod tests { use super::add_two; #[test] fn add_two_and_two(){ assert_eq!(4, add_two(2)); } #[test] fn add_three_and_two(){ assert_eq!(5, add_two(3)); } #[test] fn one_hundred(){ assert_eq!(102, add_two(100)); } #[test] #[ignore] fn test_we_want_to_ignore() { // 耗时测试代码 } }
- 集成测试文件的导入语句保持方案一中的
use tutorial1::add_two::add_two;即可。
完成后运行cargo test,所有单元测试和集成测试都能正常执行。
内容的提问来源于stack exchange,提问作者user19417266
相关产品推荐
相关产品推荐

