Rust项目tests目录无法导入src中api模块的问题求助
解决Rust集成测试无法访问源文件模块的问题
问题原因
tests目录下的文件属于集成测试,它们是独立的二进制目标,并非主crate的一部分。你的项目当前是binary crate(入口为src/main.rs),这类crate没有对外暴露的库接口,所以测试文件里用crate::api或crate::src::api都会找不到模块。
推荐解决方案:改成库+二进制混合结构
这是Rust项目的标准做法,既能保留二进制可执行文件,又能让集成测试正常访问模块:
- 在src目录下新建
lib.rs文件,把src/main.rs里的内容移过去:pub mod api; pub use api::*; - 修改src/main.rs,通过库crate导入模块(替换成你Cargo.toml里的
name字段值):use 你的crate名::*; // 这里保留原来main函数的逻辑(如果有的话) fn main() { // ... } - 在tests/my_test.rs里,直接通过库crate名导入api模块:
use 你的crate名::api::*; // 编写测试用例 #[test] fn test_api() { // ... }
临时方案:直接指定模块路径(不推荐)
如果不想调整项目结构,也可以在测试文件里用path属性手动导入src里的模块,但这种方式跳过了crate的对外接口,不符合集成测试的设计初衷:
#[path = "../src/api.rs"] mod api; use api::*; // 测试用例...
内容的提问来源于stack exchange,提问作者Milkncookiez
相关产品推荐
相关产品推荐

