我正在进行一个与文件交互的项目,我想使用文本文件来测试我的工作。但是测试不是从tests/目录运行的,因此我在运行cargo run时不能可靠地找到它们。Cargo是否总是通过从根目录运行测试来处理这个问题(似乎是这样,但我没有找到任何证明它的东西)?
tests/
cargo run
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期的完整讨论
ulmd4ohb2#
环境变量CARGO_MANIFEST_DIR可以为你提供一个稳定的基点来引用其他文件。这里,我们假设在crate的顶层有一个resources/test目录:
CARGO_MANIFEST_DIR
resources/test
use std::path::PathBuf; fn main() { let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); d.push("resources/test"); println!("{}", d.display()); }
另请参阅:
2条答案
按热度按时间lp0sw83n1#
基于@Shepmaster提供的答案,假设您打算读取文件进行测试:
在单元测试中简单地使用如下代码:
或多或少地完成了相同的目标,但在编译时(有助于捕捉丢失的文件)和相当少。如果有人知道如何使这个编译时 * 和 * 平台无关-请感到欢迎编辑。
参见rust-lang第2841期的完整讨论
ulmd4ohb2#
环境变量
CARGO_MANIFEST_DIR
可以为你提供一个稳定的基点来引用其他文件。这里,我们假设在crate的顶层有一个resources/test
目录:另请参阅: