4 个版本

0.2.2 2024 年 6 月 5 日
0.2.1 2024 年 4 月 2 日
0.2.0 2024 年 2 月 5 日
0.1.0 2024 年 1 月 26 日

#86测试

Download history 5/week @ 2024-04-21 111/week @ 2024-04-28 443/week @ 2024-05-05 31/week @ 2024-05-12 28/week @ 2024-05-19 45/week @ 2024-05-26 207/week @ 2024-06-02 79/week @ 2024-06-09 111/week @ 2024-06-16 180/week @ 2024-06-23 179/week @ 2024-06-30 71/week @ 2024-07-07 124/week @ 2024-07-14 200/week @ 2024-07-21 198/week @ 2024-07-28

每月 613 次下载
用于 6 crates

MIT/Apache

18KB
183

测试中的临时目录

tempdir 的基础上添加了几个新功能以提高测试效果

  • 允许用户使测试使用可预测的路径
  • 允许用户使测试保留其临时目录
  • 帮助确保测试目录在所有使用它的内容被销毁之前不被删除(通过 Rust 生命周期)

主要入口点是 test_temp_dir!,它返回一个 TestTempDir

环境变量

行为受 TEST_TEMP_RETAIN 影响

  • 0(或未设置):使用 TMPDIR/tmp 中的临时目录,并在测试完成后尝试删除它(相当于使用 tempfile::TempDir)。

  • 1:使用目录 target/test/crate::module::function。在测试开始时删除并重新创建它,但之后不要删除它。在 Windows 上,使用 , 来替换 ::,因为 :: 不能出现在文件名中。

  • /. 开头的路径名:类似于 1,但使用提供的路径而不是 target/test

stdout 打印

这是一个用于测试的crate。当调用时,它将在stdout上打印有关测试目录的消息。

过早删除临时目录的风险

当使用原始的 tempfile 或此crate中的 untracked 方法时,很容易编写测试用例,其中临时目录可能被删除,而指向它的路径仍然被存储并准备使用(例如在诸如 tor_keymgr::KeyMgrtor_persist 这样的对象中)。

后果可能包括测试尝试引用已删除的目录;原则上,这甚至可能构成一个漏洞,因为攻击者可能能够用恶意数据替换已删除的目录,然后测试用例可能会读取它!

如果测试用例是这样的,即“文件未找到”被认为是通过,则问题可能不会被检测到。

这只有在 TempDirTestTempDir 对象过早释放的情况下才会发生。此crate的主要API使用Rust生命周期来帮助防止这种情况:临时目录路径不是以 'static 形式直接可访问的。

恐慌

这是一个用于测试的crate。大多数错误条件都会导致恐慌。

其他crate

  • tempfile:原始临时目录的底层设施,具有自动删除功能;此crate的依赖项。

  • temp_testdir:与这个crate类似,但复杂度较低。没有基于生命周期的API,并且文件名不可预测。

依赖项

~2–11MB
~133K SLoC