Как использовать модуль с атрибутом `test` в тестах doc?

#rust #rustdoc

#Ржавчина #rustdoc

Вопрос:

У меня есть модуль, который я хотел бы использовать в блоке кода в моей документации.

Этот модуль используется только для тестов, поэтому у него есть #![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`
 

Есть ли способ заставить мой тестовый код документации использовать эти файлы, настроенные для тестов?

Ответ №1:

Это известное ограничение doctest (выпуск # 45599). К сожалению, с момента возникновения проблемы (конец 2017 года) реального прогресса нет.

В качестве обходного пути предлагается добавить функцию в свой Cargo.toml

 [features]
test = []
 

Вместо проверки #[cfg(test)] вы можете сделать #[cfg(feature = "test")] .

Комментарии:

1. Спасибо за четкий ответ. К сожалению, обходной путь — это не совсем то, что мы можем сделать в нашем проекте, но приятно знать, что такой обходной путь существует, и мы не единственные, кто сталкивается с этой проблемой.