2

我正在使用(学习)vfsStream 来测试目录树上的文件系统操作,其中包含 23,000 个项目。

这是我在 PHPUnit 测试中尝试做的事情:

    public function testMockFS() {
        $buffer = (array) json_decode(file_get_contents(__DIR__ . '/resources/structure.json'));
        $root = vfsStream::setup('/',null,$buffer);

        $it = new FilesystemIterator($root);
        foreach ($it as $fileInfo) {
            echo $fileInfo->getFilename() . "\n";
    }

}

注意:我知道这不会测试任何东西。现在,我只是想让迭代工作,所以我想在开始编写测试之前将目录结构打印到屏幕上。

structure.json是来自生产的转储,其中包含文件系统的完整复制(没有文件内容,这与我们正在处理的工作无关)。

vfsStream::setup() 似乎工作正常。没有错误。

如何使用 FilesystemIterator 迭代 vfsSystem?我觉得要么 1)$root 应该从 FilesystemIterator 可以使用的 vfs 返回一个目录,或者 b)我应该将“vfs::/”作为参数传递,但 FilesystemIterator 不知道什么是“vfs::”事情是。

我敢肯定,我让这变得比它必须的更难。提前致谢。

4

1 回答 1

2

我想到了。你必须使用 vfsStream::url('/path/to/directory/you/want');

public function testMockFS() {
    $buffer = (array) json_decode(file_get_contents(__DIR__ . '/resources/structure.json'));
    $root = vfsStream::setup('/',null,$buffer);

    $it = new FilesystemIterator(vfsStream::url('/'));
    foreach ($it as $fileInfo) {
        echo $fileInfo->getFilename() . "\n";
}

}

于 2017-07-28T14:50:50.630 回答