【发布时间】:2019-10-31 23:19:58
【问题描述】:
我正在编写一个带有单元测试的 Rust 库(从 cargo 生成)。
我想在我的单元测试中使用 extern crate maplit 以便能够使用类似 JavaScript 的 hashmap 文字。我不想在我的库代码中使用 maplit。
maplit 提供了一个显然必须使用#[macro_use] 激活的宏。我能够让这一切正常工作的唯一方法是将其放在lib.rs 的顶部:
#[cfg(test)] #[macro_use] extern crate maplit;
// my crate-specific stuff
此时我意识到我不知道#[cfg(test)] 到底是做什么的。我在我的测试中使用它。根据约定,这些都包含在库代码中,如下所示:
// some library code
#[cfg(test)]
mod test {
use super::*;
// tests here
}
我原以为 #[cfg(test)] 行将直到文件(或块?)结尾之前的内容标记为仅适用于测试配置。
如果是这样,那么将这个指令放在lib.rs 的顶部似乎是个问题。当我编译一个发行版时,我的整个库不会被删除吗?
我试图查找有关 #[cfg(test)] 的确切作用的文档,但无济于事。
【问题讨论】:
-
我确定,但我认为这意味着这段代码仅用于测试。但我认为可能还有更多,这种属性是编译器的一种神奇功能
标签: rust