16个版本 (8个破坏性更新)

0.9.1 2023年12月14日
0.9.0 2023年11月27日
0.8.1 2023年10月4日
0.8.0 2023年6月27日
0.4.0 2020年12月29日

#158 in 文件系统

Download history 1742/week @ 2024-04-08 1881/week @ 2024-04-15 1566/week @ 2024-04-22 1414/week @ 2024-04-29 2242/week @ 2024-05-06 2615/week @ 2024-05-13 2068/week @ 2024-05-20 1263/week @ 2024-05-27 1842/week @ 2024-06-03 1320/week @ 2024-06-10 2037/week @ 2024-06-17 1367/week @ 2024-06-24 1916/week @ 2024-07-01 2372/week @ 2024-07-08 2386/week @ 2024-07-15 2690/week @ 2024-07-22

每月下载量:9,452
用于 18 crates

MIT/Apache

44KB
609

半持久、范围测试目录

这个crate的目的是使测试中临时目录的使用更加容易,主要通过在测试函数的某个位置调用testdir!()宏来实现。目录是按照范围和测试来组织的,测试结束后将可用于检查。在随后的测试运行中,将清理旧的测试目录。

如果你曾经使用过pytest的tmp_pathtmpdir固件,这种模式应该很相似。

默认情况下,测试目录将在cargo的目标目录中创建

target/testdir-$N/module/path/test_name

在这里,$N是一个整数生成号,随着每次cargo test调用而增加。在下一个cargo test运行中,将删除8个最新版本之前的版本。

还有一个指向最新版本的符号链接

target/testdir-current -> testdir-$N`

然而,请注意,在Windows上,有时由于权限问题,这可能无法更新,这个符号链接在Windows上是尽力而为的。

示例

即使执行这个命令cargo test --jobs=1,这些测试仍然会通过,因为每个测试都有自己的唯一目录

// E.g. in lib.rs

mod tests {
    use std::path::PathBuf;
    use testdir::testdir;

    #[test]
    fn test_write() {
        let dir: PathBuf = testdir!();
        let path = dir.join("hello.txt");
        std::fs::write(&path, "hi there").ok();
        assert!(path.exists());
    }
    
    #[test]
    fn test_read() {
        let dir: PathBuf = testdir!();
        let path = dir.join("hello.txt");
        assert!(!path.exists());
    }
}

之后,您可以检查目录,它们应该看起来像这样

$ tree target/
target/
+- testdir-0
|    +- cratename
|         +- tests
|              +- test_read
|              +- test_write
|                   +- hello.txt
+- testdir-current -> testdir-0

反馈和贡献

代码位于https://github.com/flub/testdir上的git仓库中,您可以从那里创建问题、克隆仓库并创建拉取请求。

依赖项

~4–6.5MB
~133K SLoC