为什么 rust 仅在测试中使用时会抱怨未使用的功能?
Why is rust complaining about an unused function when it is only used from tests?
当一个函数只从测试中调用时,rust 会抱怨它从未被使用过。为什么会发生这种情况以及如何解决这个问题?
示例:
fn greet() {
println!("Hello!")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_greet() {
greet();
}
}
我收到以下编译器警告:
Compiling playground v0.0.1 (/playground)
warning: function is never used: `greet`
--> src/lib.rs:1:4
|
1 | fn greet() {
| ^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: 1 warning emitted
在 rust 中,fn 默认是私有的。在您的 module 之外无法访问 greet()。如果 greet() 除了测试之外没有在其中使用,那么 Rust 会正确地将其标记为死代码。
如果 greet() 应该是您的 public 界面的一部分,请将其标记为 pub:
pub fn greet() {
println!("Hello!")
}
如果 greet() 是一个仅用于测试的帮助程序,请将其移至 mod 测试中:
#[cfg(test)]
mod tests {
fn greet() {
println!("Hello!")
}
#[test]
fn test_greet() {
greet();
}
}
当一个函数只从测试中调用时,rust 会抱怨它从未被使用过。为什么会发生这种情况以及如何解决这个问题?
示例:
fn greet() {
println!("Hello!")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_greet() {
greet();
}
}
我收到以下编译器警告:
Compiling playground v0.0.1 (/playground)
warning: function is never used: `greet`
--> src/lib.rs:1:4
|
1 | fn greet() {
| ^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: 1 warning emitted
在 rust 中,fn 默认是私有的。在您的 module 之外无法访问 greet()。如果 greet() 除了测试之外没有在其中使用,那么 Rust 会正确地将其标记为死代码。
如果 greet() 应该是您的 public 界面的一部分,请将其标记为 pub:
pub fn greet() {
println!("Hello!")
}
如果 greet() 是一个仅用于测试的帮助程序,请将其移至 mod 测试中:
#[cfg(test)]
mod tests {
fn greet() {
println!("Hello!")
}
#[test]
fn test_greet() {
greet();
}
}