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 在 测试 中
每月 613 次下载
用于 6 crates
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::KeyMgr
或 tor_persist
这样的对象中)。
后果可能包括测试尝试引用已删除的目录;原则上,这甚至可能构成一个漏洞,因为攻击者可能能够用恶意数据替换已删除的目录,然后测试用例可能会读取它!
如果测试用例是这样的,即“文件未找到”被认为是通过,则问题可能不会被检测到。
这只有在 TempDir
或 TestTempDir
对象过早释放的情况下才会发生。此crate的主要API使用Rust生命周期来帮助防止这种情况:临时目录路径不是以 'static
形式直接可访问的。
恐慌
这是一个用于测试的crate。大多数错误条件都会导致恐慌。
其他crate
-
tempfile
:原始临时目录的底层设施,具有自动删除功能;此crate的依赖项。 -
temp_testdir
:与这个crate类似,但复杂度较低。没有基于生命周期的API,并且文件名不可预测。
依赖项
~2–11MB
~133K SLoC