Rust测试疑难:Cargo误判tests模块导入未使用,明明已用却报警告
问题原因与解决方案
问题根源
你的tests模块没有添加#[cfg(test)]属性,导致cargo build会编译该模块,但#[test]标记的测试函数在常规构建过程中会被忽略——测试函数里的代码不会被执行,因此导入的f被判定为未使用,从而触发警告。
解决方案
给tests模块加上#[cfg(test)]属性,这样只有执行cargo test时才会编译该模块,常规cargo build会完全跳过它,不会产生未使用导入的警告。修改后的代码如下:
pub fn f() {} #[cfg(test)] mod tests { use crate::a::f; #[test] fn test_f() { f(); } }
补充说明
cargo build仅编译库或二进制目标代码,不会处理测试相关代码;cargo test会编译所有标注了#[cfg(test)]的模块和#[test]函数。- 若使用
use super::*,同样需要给tests模块添加#[cfg(test)]属性,才能避免常规构建时的未使用导入警告。
内容的提问来源于stack exchange,提问作者Green 绿色
相关产品推荐
相关产品推荐

