Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHPUnit和VFSstream模拟只读目录_Php_Phpunit_Vfs Stream - Fatal编程技术网

如何使用PHPUnit和VFSstream模拟只读目录

如何使用PHPUnit和VFSstream模拟只读目录,php,phpunit,vfs-stream,Php,Phpunit,Vfs Stream,我有一个简单的open(file)方法,如果无法在给定路径中打开或创建文件,该方法将引发异常: const ERR_MSG_OPEN_FILE='无法在%s处打开或创建文件'; 公共函数打开($filePath) { ini设置(“自动检测线结束”,TRUE); if(false!==($this->handler=@fopen($filePath,'c+')){ 返回true; }否则{ 抛出新\异常( sprintf(self::ERR\u MSG\u OPEN\u FILE,$filePa

我有一个简单的open(file)方法,如果无法在给定路径中打开或创建文件,该方法将引发异常:

const ERR_MSG_OPEN_FILE='无法在%s处打开或创建文件';
公共函数打开($filePath)
{
ini设置(“自动检测线结束”,TRUE);
if(false!==($this->handler=@fopen($filePath,'c+')){
返回true;
}否则{
抛出新\异常(
sprintf(self::ERR\u MSG\u OPEN\u FILE,$filePath)
);
}
}
使用PHPUnit和VFSStream进行单元测试:

$structure=[
'sample.csv'=>文件获取内容(\uuuu DIR\uuuu./../sampleFiles/small.csv')
];
$this->root=vfstream::setup('exampleDir',null,$structure);
$existingFilePath=vfstream::url('exampleDir')。目录“”分隔符sample.csv';
$this->file=新文件();
$this->file->open($existingFilePath);
上面的设置创建了一个包含模拟文件(从现有CSV文件读取/克隆)的虚拟目录结构,这满足了open方法打开文件的要求。而且,如果我传递一个不同的路径(没有现有文件),它将在同一个虚拟结构器中创建

现在为了解决这个异常,我想在现有的结构器中添加一个只准备好的目录,假设一个文件夹属于另一个用户,并且我对它没有写权限,就像这样,当我试图打开该文件夹中不存在的文件时,尝试创建一个应该失败,open方法应该抛出异常

唯一的问题是,。。。。我不知道怎么做:D


任何建议、提示和指导都将不胜感激:)

您只需将模拟目录的url指向错误路径即可

$existingFilePath = vfsStream::url('badExampleDir') . DIRECTORY_SEPARATOR . 'incorrect.csv';

考虑到从未设置过badExampleDir,您的方法将无法在其中创建文件。

您可以简单地将模拟目录的url指向错误的路径

$existingFilePath = vfsStream::url('badExampleDir') . DIRECTORY_SEPARATOR . 'incorrect.csv';

考虑到从未设置过badExampleDir,您的方法将无法在其中创建文件。

谢谢,它将引发您提到的异常:)但我希望了解如何在使用vfsStreamHanks创建的结构器中创建(添加)这样的目录,它将抛出您提到的异常:),但我希望了解如何在使用vfstream创建的结构器中创建(添加)这样的目录