📌

cargo workspace の `cargo run` と `cargo test` でワーキングディレクトリが異なるケースがある

2022/10/24に公開約500字

結論

ワーキングディレクトリ 理由
cargo run 現在の作業ディレクトリ target ディレクトリが workspace のルートディレクトリにあるため
cargo test 該当する子crate のディレクトリ テストは子crate 上で実行されるため

従って、workspace のルートで cargo runcargo test を実行すると、ワーキングディレクトリが test と異なる結果となる。(std::env::current_dir() が異なるパスを示してしまう。)

対処法

以下のようにすれば、子 crate の ディレクトリを取得できる。

let path = Path::new(env!("CARGO_MANIFEST_DIR"));

また、以下のようにすれば、このcrate の 親ディレクトリを取得できる。

let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();

Discussion

ログインするとコメントできます