我有一个PHP应用程序,其代码路径仅在指定文件为只读时触发。如果文件是可读可写的,则采用另一个代码路径。特别是,我正在努力与unlink
。要测试的简化代码如下所示
try {
// do something
unlink($pathToFile);
// do more
} catch (Throwable $e) {
// recovery and alternative code if unlink failed
}
如果unlink
因为文件不可写而失败,则捕获分支被占用。我已经手动创建了一个只读文件。
我的问题是用PHPunit编写一个自动测试,它在我的开发机器上运行在检查出的工作目录中,但也作为Github工作流的一部分。
我已经尝试用PHPunit创建一个示例文件,然后chmod
文件到0666
。不幸的是,这不会触发异常,因为如果调用用户是文件的所有者(这似乎是合理的),则文件权限似乎被绕过了。我还尝试了PHPunit中的chmod
,并使0
(aka root)为文件的所有者,但这失败了,因为非root用户不允许调用chmod
。
不管怎么说,"松散"的正确方法是什么?执行PHPunit进程和运行PHP应用程序的用户的文件访问权限?(到目前为止,我所尝试的一切似乎都是死路一条,好像不可能摆脱和扔掉自己创建的文件的权利。)
要使unlink()
返回false,取消一个根本不存在的文件的链接。
单行错误处理的示例代码(在您的示例中可以替代catch/try,您也可以这样做):
$result = @unlink('/path/to/non-existing-file');
if (false === $result) {
# ...
}
如果你需要配置更多,一个允许更细粒度控制的现有工具是Vfs Stream。它甚至允许创建专用错误。