#temp-dir #directory-structure #directory #testing #test-files

rfs_tester

此包允许您为测试准备一个临时目录,执行与文件操作相关的测试,并在测试完成后删除此测试目录

6 个版本

0.2.1 2021 年 3 月 1 日
0.2.0 2021 年 2 月 28 日
0.1.6 2021 年 2 月 27 日

1190文件系统

每月 23 次下载

MIT 许可证

33KB
530

文件系统测试器 - 帮助启动文件系统测试单元的包

=================================================================

概述

此库提供了用于测试文件系统操作的简单实用工具。当您测试某些内容时,需要一些沙盒,测试完成后应该将其擦除。此包允许您配置临时目录及其内部结构,执行测试,并在所有工作完成后将其删除。

它可以配置为创建自定义目录结构。创建此包的主要思想是为应与文件系统一起工作的程序编写测试单元,操作目录、文件以及它们之间的链接。I/O 测试需要具有一些文件的模板目录,这些文件位于文件系统结构的不同深度。

随机生成器用于为包含其他测试文件系统单元的临时目录名称添加唯一性。

配置

测试目录结构可以通过 yaml 或 json 格式进行配置。

Yaml 配置

---
  - directory:
      name: test
      content:
        - file:
            name: test.txt
            content:
              inline_bytes:            
                - 116            
                - 101            
                - 115            
                - 116

它将生成名为 test_726537253725 的目录,并在该目录中创建名为 test.txt 的文件,内容为 "test"。目录名称中的数字可能不同,因为这是一个随机数。

Json 配置

可以通过 json 格式配置相同的目录结构

示例

[
  {
    "directory": 
      {
        "name": "test",
        "content":
          [
            {
              "file":
                {
                  "name": "test.txt",
                  "content":
                    {
                      "inline": [116,101,115,116]
                    }
                }
            }
          ]
      }
  }
]

目录配置

目录结构可以包含多个嵌套目录。 重要 配置的第一级应从单个目录开始。此包含目录将是带有附加随机数字的名称的沙盒容器。其他内部单元:目录、文件和链接将不会更改其名称,并可以在测试中按配置使用。

目录配置可以指定名称和内容

  • 名称 - 表示目录名称的字符串
  • 内容 - 内部文件系统单元(目录、文件、链接)的列表(数组)
示例

yaml

---
  - directory:
      name: test
      content:
        - file:
            name: test.txt
            content: empty
        - link:
            name: test_link
            target: test.txt

或相同的 json

{
  "name": "test_dir",
  "content": [
    {
      "file": {
        "name": "test.txt",
        "content": "empty"
      }
    },
    {
      "link": {
        "name": "test_link",
        "target": "test.txt"
      }
    }
  ]
}

如何定义测试?

当我们要测试创建的沙盒中的文件、目录和链接时,我们需要知道外部目录的确切名称。此名称将在每次 FsTester 创建时都是唯一的。FsTester 在 perform_fs_test 函数的闭包参数中为我们提供此名称。

示例

use std::fs;
const YAML_DIR_WITH_TEST_FILE_FROM_CARGO_TOML: &str = "---
- directory:
    name: test
    content:
      - file:
          name: test_from_cargo.toml
          content:
            original_file: Cargo.toml
 ";

let tester = FsTester::new(YAML_DIR_WITH_TEST_FILE_FROM_CARGO_TOML, ".");
tester.perform_fs_test(|dirname| {
//                      ^^^^^^^ name with appended random at the end of name 
  let inner_file_name = format!("{}/{}", dirname, "test_from_cargo.toml");
  let metadata = fs::metadata(inner_file_name)?;
   
  assert!(metadata.len() > 0);
  Ok(())
});

TODO

  • 创建更多测试单元

依赖项

~2.3–3.5MB
~68K SLoC