如何抑制测试使用的函数的“函数永不使用”警告?

时间:2015-10-02 05:00:14

标签: rust

我正在Rust写一个程序,我有一些测试。我为这些测试编写了一个辅助函数,但每当我使用cargo build构建时,它都警告我该函数从未使用过:

  

警告:从不使用函数:...默认打开#[warn(dead_code)]

如何将此功能标记为使用以便不收到警告?

6 个答案:

答案 0 :(得分:22)

具体问题

  

如何将此功能标记为使用以便不收到警告?

Rust编译器会运行许多lints来警告您代码中可能存在的问题,而dead_code lint就是其中之一。在代码完成时指出错误非常有用,但在早期阶段也可能是麻烦。但是,可以通过allow关闭所有lints,并且您的错误消息(#[warn(dead_code)] on by default)包含您可以禁用的lint的名称。

#[allow(dead_code)]
fn my_unused_function() {}

替代测试

  

我为这些测试编写了一个辅助函数,但每当我使用cargo build构建时,它都会警告我该函数从未使用过。

这恰好是一种特殊情况,即真实可执行文件中不需要仅用于测试的代码,并且可能不应包括在内。

为了有选择地禁用编译测试代码,您可以使用cfg attribute test配置文件对其进行相应的标记。

#[cfg(test)]
fn my_test_specific_function() {}

以这种方式标记时,编译器知道在编译期间忽略该方法。这类似于其他语言(如C或C ++)中常用的ifdef用法,除非定义了TESTING,否则您要告诉预处理器忽略所附的代码。

#ifdef TESTING
...
#endif

答案 1 :(得分:8)

如果某些内容仅用于测试,则应完全省略。这可以使用#[cfg(test)]属性完成。

答案 2 :(得分:5)

dead_code是一个lint,这意味着你可以allow使它触发它。

#[allow(dead_code)]
fn dummy() {}

fn main() {}

答案 3 :(得分:1)

对于在制作 rust 库时收到此警告的人,如果您没有在 lib.rs 中将模块设置为 pub,您可能会收到此警告。

pub mod foo;

答案 4 :(得分:0)

还有另一种情况会发生这种情况。如果您在一个模块中有多个辅助函数,例如在 tests/utils/mod.rs 中,然后是几个集成测试(tests/a.rstests/b.rs),每个都可以

mod utils;
use utils::...;

如果您没有使用所有测试中的所有代码,您将收到死代码警告。例如,如果测试 a.rs 仅使用 utils::foob.rs 仅使用 utils::bar,那么您将收到两者的死代码警告。

那是因为每个测试都被编译为一个独立的 crate。 Here is the bug report for it. 看起来很难解决,所以我不会屏住呼吸。

答案 5 :(得分:0)

在未使用的函数名前加一个下划线:

fn _dummy() {}

fn main() {}

见:https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html#dead-code