Rust测试中找不到get_skyline函数,如何引用被测试文件?
解决Rust测试中无法找到函数的问题
先确认正确的项目结构
你的项目需遵循标准Rust项目结构:
your_project/ ├── src/ │ ├── lib.rs │ └── skyline.rs ├── tests/ │ └── skyline.rs └── Cargo.toml
步骤1:导出src/skyline.rs模块
在src/lib.rs中添加代码,将skyline模块公开,让测试代码能够访问:
pub mod skyline;
步骤2:在测试文件中引用目标函数
tests目录下的文件属于集成测试,需要通过你的库名(Cargo.toml中[package]下的name字段)来引用模块。假设你的库名为skyline_solver,修改tests/skyline.rs如下:
// 替换skyline_solver为你自己的库名 use skyline_solver::skyline::Solution; #[test] fn one_building() { let building1 = vec![1,2,2]; let buildings = vec![building1]; let expected_skyline = vec![vec![1,2], vec![2,0]]; assert_eq!(Solution::get_skyline(buildings), expected_skyline); }
可选:改用单元测试(更简单的方式)
如果不需要集成测试,直接在src/skyline.rs末尾添加测试模块即可,无需处理跨文件引用:
impl Solution { pub fn get_skyline(buildings: Vec<Vec<i32>>) -> Vec<Vec<i32>> { } } #[cfg(test)] mod tests { // 引用父模块的所有内容 use super::*; #[test] fn one_building() { let building1 = vec![1,2,2]; let buildings = vec![building1]; let expected_skyline = vec![vec![1,2], vec![2,0]]; assert_eq!(Solution::get_skyline(buildings), expected_skyline); } }
额外说明
如果你的项目是二进制项目(入口是src/main.rs),需要把业务代码移到src/lib.rs中,因为二进制项目的tests目录无法直接访问src/main.rs的代码,必须通过库模块导出。
内容的提问来源于stack exchange,提问作者Sachin Kainth
相关产品推荐
相关产品推荐

