繁体   English   中英

为什么 rust 抱怨未使用的 function 仅用于测试?

[英]Why is rust complaining about an unused function when it is only used from tests?

当仅从测试中调用 function 时,rust 抱怨它从未被使用过。 为什么会发生这种情况以及如何解决这个问题?

例子:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=52d8368dc5f30cf6e16184fcbdc372dc

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 默认是私有的。 greet() 在你的模块之外是不可访问的。 如果 greet() 除了测试之外没有在其中使用,那么 rust 会正确地将其标记为死代码。

如果 greet() 应该是你的公共接口的一部分,将其标记为 pub:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8a8c50b97fe3f1eb72a01a6252e9bfe6

pub fn greet() {
    println!("Hello!")
}

如果 greet() 是一个仅用于测试的帮助程序,请将其移至 mod 测试中:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3dc51a36b4d5403ca655dec0210e4098

#[cfg(test)]
mod tests {
    fn greet() {
        println!("Hello!")
    }
    
    #[test]
    fn test_greet() {
        greet();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM