如何单独运行测试Rust项目中指定.rs文件或单个fn函数
Rust 单文件/单函数测试实现方案
核心问题排查
执行cargo test时触发main.rs业务逻辑,90%是两类原因:
- main.rs中存在未收敛的顶层执行代码:只要编译项目二进制,main函数入口的逻辑就会被链接,不要把业务执行逻辑裸写在源码顶层,正常收敛在
fn main()函数的执行流程中即可,测试运行不会主动触发二进制执行 - 集成测试目录位置错误:tests目录必须放在项目根目录(与src、Cargo.toml同级),放在src内部会被cargo识别为普通业务模块,被main引用后自然会执行业务逻辑
单元测试:测试单文件/单个私有函数
这是验证单个.rs文件、内部私有fn最简便的方式,不需要新建tests目录,直接在待测试的.rs文件末尾添加测试模块即可,测试代码仅在执行cargo test时会被编译。
比如要测试src下parse_config.rs中的内部函数parse_line,直接在文件末尾追加:
// 业务代码 fn parse_line(input: &str) -> Option<u32> { input.parse().ok() } // 测试模块 #[cfg(test)] mod tests { use super::*; // 导入当前模块下的所有业务代码 #[test] // 标记该函数为测试用例 fn test_parse_line_valid_input() { assert_eq!(parse_line("123"), Some(123)); } #[test] fn test_parse_line_invalid_input() { assert_eq!(parse_line("abc"), None); } }
常用执行命令:
- 测试单个函数:
cargo test test_parse_line_valid_input - 测试当前rs文件下所有用例:
cargo test parse_config::tests
集成测试:测试跨模块公共逻辑
根目录下新建tests文件夹后,文件夹内每个.rs文件都是独立的集成测试入口,cargo会自动识别,不需要手动写main函数。
比如新建tests/cli_logic_test.rs测试主项目对外暴露的逻辑,直接导入项目包即可(包名和Cargo.toml中配置的name字段一致):
// 假设Cargo.toml中name为my_cli use my_cli::parse_config::parse_line; #[test] fn test_cli_parse_flow() { assert_eq!(parse_line("456"), Some(456)); }
常用执行命令:
- 跑单个集成测试文件:
cargo test --test cli_logic_test - 跑所有集成测试:
cargo test --test '*'
CLion 快捷操作
安装官方Rust插件后,所有带#[test]标记的函数、测试模块旁都会出现绿色运行按钮,点击即可直接运行对应测试用例,不需要手动输入命令。
内容的提问来源于stack exchange,提问作者Alberto Olivieri
相关产品推荐
相关产品推荐

