7
mod simulation;

use simulation::factory::FactoryType;

では正常に動作しますがmain.rs、 内の doctest では動作しませんsimulation/factory.rs:

impl product_type::ProductType for FactoryType {
    /// Lorem Ipsum
    ///
    /// # Examples
    ///
    /// ```
    /// use simulation::factory::FactoryType;
    ///
    /// ...
    /// ```
    fn human_id(&self) -> &String {
        ...
    }
}

cargo testエラーが表示されます

---- simulation::factory::human_id_0 stdout ----
    <anon>:2:9: 2:19 error: unresolved import `simulation::factory::FactoryType`. Maybe a missing `extern crate simulation`?
<anon>:2     use simulation::factory::FactoryType;
                 ^~~~~~~~~~
error: aborting due to previous error
thread 'simulation::factory::human_id_0' panicked at 'Box<Any>', /home/rustbuild/src/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libsyntax/diagnostic.rs:192

doctest を機能させるにはどうすればよいですか?

4

2 に答える 2

8

ドキュメント テストを作成するときは、コードのユーザーとして行動する必要があります。これらのファイルが与えられた場合:

src/lib.rs

pub mod simulation {
    pub mod factory {
        pub struct FactoryType;

        impl FactoryType {
            /// ```
            /// use foo::simulation::factory::FactoryType;
            ///
            /// let f = FactoryType;
            /// assert_eq!(42, f.human_id())
            /// ```
            pub fn human_id(&self) -> u8 { 41 }
        }
    }
}

src/main.rs

extern crate foo;
use foo::simulation::factory::FactoryType;

fn main() {
    let f = FactoryType;
    println!("{}", f.human_id());
}

すべてが機能します。main.rsでは、 と言わなければならないことに注意してextern crateください。その後、すべての参照にクレート名を含める必要があります。doctest は同じですが、extern crateが自動的に組み込まれます。

于 2015-09-09T14:02:40.077 に答える
3

huon-dbaupp が指摘したように、bin クレートはドキュメント テストからインポートできません。

解決策は、ほとんどのコードをライブラリ クレートとして定義し、その周りに単なるシェルである 1 つのバイナリを配置することです。

たとえば、レーサーはこの手法を採用しています。

于 2015-09-09T11:42:32.367 に答える