rust 我如何找到使用Cargo进行测试的资源?

oxosxuxt  于 2022-11-24  发布在  Go
关注(0)|答案(2)|浏览(179)

我正在进行一个与文件交互的项目,我想使用文本文件来测试我的工作。但是测试不是从tests/目录运行的,因此我在运行cargo run时不能可靠地找到它们。
Cargo是否总是通过从根目录运行测试来处理这个问题(似乎是这样,但我没有找到任何证明它的东西)?

lp0sw83n

lp0sw83n1#

基于@Shepmaster提供的答案,假设您打算读取文件进行测试:

macro_rules! test_case {($fname:expr) => (
  concat!(env!("CARGO_MANIFEST_DIR"), "/resources/test/", $fname) // assumes Linux ('/')!
)}

在单元测试中简单地使用如下代码:

test_case!("json_data/example.json")

或多或少地完成了相同的目标,但在编译时(有助于捕捉丢失的文件)和相当少。如果有人知道如何使这个编译时 * 和 * 平台无关-请感到欢迎编辑。
参见rust-lang第2841期的完整讨论

ulmd4ohb

ulmd4ohb2#

环境变量CARGO_MANIFEST_DIR可以为你提供一个稳定的基点来引用其他文件。这里,我们假设在crate的顶层有一个resources/test目录:

use std::path::PathBuf;

fn main() {
    let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    d.push("resources/test");

    println!("{}", d.display());
}

另请参阅:

相关问题