Rust 使用cargo在示例/文件夹中运行文档测试

Rust 使用cargo在示例/文件夹中运行文档测试,rust,rust-cargo,Rust,Rust Cargo,我想执行写在examples/文件夹中的Rust //示例/example.rs //! ```锈 //! 恐慌!(); //! ``` fn main(){} 我希望货物测试--doc会惊慌失措,但上面的文档测试从未运行过。当我在src/lib.rscargo-test--doc中定义相同的文档测试时,会像预期的那样恐慌 如何运行examples/文件夹中定义的文档测试 环境: $ cargo --version cargo 1.51.0 (43b129a20 2021-03-16) $ r

我想执行写在
examples/
文件夹中的Rust

//示例/example.rs
//! ```锈
//! 恐慌!();
//! ```
fn main(){}
我希望
货物测试--doc
会惊慌失措,但上面的文档测试从未运行过。当我在
src/lib.rs
cargo-test--doc
中定义相同的文档测试时,会像预期的那样恐慌

如何运行
examples/
文件夹中定义的文档测试

环境:

$ cargo --version
cargo 1.51.0 (43b129a20 2021-03-16)
$ rustc --version
rustc 1.51.0 (2fd73fabe 2021-03-23)

Rust中的文档测试仅针对为
cfg(doc)
构建时在库中使用的模块运行。另外
doctest=true
Cargo.toml
中当前为(Rust 1.51)

这样做的一个原因是,文档测试的运行就像它们是链接到库的可执行文件一样。对于示例的文档测试,不清楚它们应该如何运行。链接到示例可执行文件的可执行文件没有多大意义

但有一个棘手的解决办法:

您可以使用该属性将示例作为模块包含在库中(例如在
src/lib.rs
中),并将其与条件编译属性相结合,并且仅在生成文档时执行此操作,而不在结果中生成这些模块的输出:

#[cfg(doc)]
#[文件(隐藏)]
#[path=“../examples”]
mod示例{
mod示例;
}
这导致在运行
cargo test--doc
时包含
examples/example.rs
中的文档测试。如果要从doctest中的
example.rs
导入内容,则需要使用
your_库::examples::example:…
访问名称空间,并将
pub
添加到模块声明中

$ cargo test --doc
…
test src/../examples/example.rs - examples::example (line 2) ... FAILED

failures:

---- src/../examples/example.rs - examples::example (line 2) stdout ----
Test executable failed (exit code 101).

stderr:
thread 'main' panicked at 'explicit panic', src/../examples/example.rs:3:1
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

1. <代码>货物单据和
货物测试
将不包括未使用的文件,出于某些原因,其中包括示例。2.我不确定您是否知道,但是examples/是一个特殊的类别,它有一些功能,例如,当运行
cargo test
时,其中的所有文件都已编译(但未运行),并且可以使用
cargo run运行示例[name]
3运行示例
cargo doc
可能不会生成示例文档,因为它不知道如何处理它(例如,在页面上放置它的位置)>3。cargo doc可能不会为示例生成文档,因为它不知道如何处理它(例如,在页面上的何处放置它),当将下面的内容添加到cargo.toml中时,它会为示例生成文档,但正如您所说,生成的文档未在原始板条箱中引用,也没有执行文档测试[[example]]name=“example”doc=true```