尽管我正在使用模块中的所有导入tests
,但 Cargo 仍将其标识为未使用。请考虑以下示例:
pub fn f() {}
mod tests {
use crate::a::f;
#[test]
fn test_f() {
f();
}
}
编译此程序cargo build
会产生以下警告:
warning: unused import: `crate::a::f`
--> src/a.rs:4:9
|
4 | use crate::a::f;
| ^^^^^^^^^^^
删除导入自然会导致错误。
Rust 的示例用于import super::*
其单元测试,但在我的示例中,我收到了相同的警告:
warning: unused import: `super::*`
--> src/a.rs:4:9
|
4 | use super::*;
| ^^^^^^^^
这里有什么问题?
我的 Cargo.toml 是:
[package]
name = "problem"
version = "0.0.1"
edition = "2021"
你的例子有点相当于
属性
#[test]
表明 旨在test_f()
由 启动和分析cargo test
。因此,当不运行时
cargo test
,您的tests
模块仅包含use
声明,就好像test_f()
根本不存在一样;因此发出警告。#[cfg(test)]
在模块上引入属性会指示编译器仅在运行时才tests
考虑整个模块。 因此,当不运行时,情况就像您的模块根本不存在一样,但运行时模块存在,并且声明是有用的,因为也存在并且需要此声明。cargo test
cargo test
tests
cargo test
tests
use
test_f()
use
仔细查看该示例后,我发现缺少注释
#[cfg(test)]
:然后,警告消失。