如何在文档测试中使用带有 `test` 属性的模块?

How to use a module with the `test` attribute within doc tests?

我有一个模块,我想在文档的代码块中使用它。

此模块仅用于测试,因此它具有应保留的 #![cfg(test)] 属性。

然而,结果是,运行 测试文档时似乎没有包含此文件。

看看MVCE:

lib.rs

//! ```
//! use example::mock::Number;
//! ```
pub mod mock;

pub fn main() {}

mock.rs

#![cfg(test)]

pub type Number = i32;

这失败了:

---- src/lib.rs -  (line 1) stdout ----
error[E0432]: unresolved import `example::mock`
 --> src/lib.rs:2:14
  |
4 | use example::mock::Number;
  |              ^^^^ could not find `mock` in `example`

有没有办法让我的文档测试代码使用这些为测试配置的文件?

这是 doctest (Issue #45599) 的已知限制。可悲的是,自问题开始(2017 年底)以来没有任何实际进展。

作为解决方法,it is suggested 您可以向 Cargo.toml

添加一项功能
[features]
test = []

您可以 #[cfg(feature = "test")].

而不是检查 #[cfg(test)]