Rust 中的 #[test] 和 #[cfg(test)] 有什么区别?

Dan*_*del 1 testing unit-testing rust rust-cargo

Rust文档提到该#[test]指令用于标记仅在测试模式下编译和执行的函数。#[cfg(test)]那么制定该指令的原因是什么?

Cha*_*man 5

#[cfg(test)]与任何其他 一样#[cfg],可以应用于任何代码段(常量、模块、函数、语句...),并在不编译测试时将其从编译中过滤掉。#[test]仅适用于函数,并且除了在不编译测试时删除该函数外,还将其注册为单元测试。

例如,您可以使用#[cfg(test)]不编译测试的整个模块(以节省编译时间),或者不编译仅测试的代码,例如测试助手或包中的其他测试逻辑。