所以我目前正在进行单元测试,在旅行中我发现我可能还需要模拟文件系统以及数据库查询等。
我从 PHPUnit 文档中阅读了一个建议,即 vfsStream 是一个很好的模拟文件系统的库。
不过,我在使用它时遇到了问题。
尽管在 GitHub 上托管的 wiki 中提供了以下文档,但我并不真正了解如何设置它。
我已经使用一些恰当命名的方法将文件系统交互抽象到它自己的类中。这似乎不是手头的问题,因为当我没有模拟文件系统时,它按预期工作。
这是我设置测试的方式:
public function setUp()
{
// Setup here
$this->filesystem = new Filesystem;
vfsStreamWrapper::register();
$this->root = vfsStream::setup('test-dir');
}
这是我为测试目录创建而编写的示例测试:
public function testCanCreateDirectory()
{
$dir = vfsStream::url($this->root->path() . '/sub-dir');
$filesystem = $this->filesystem;
$filesystem->makeDirectory($dir);
$this->assertTrue($filesystem->isDirectory($dir));
}
这似乎有效,到目前为止一切都很好。但是,下一个测试失败了:
public function testCanPutFile()
{
$file = $this->root->url() . '/sub-dir/test.txt';
$contents = "test text";
$filesystem = $this->filesystem;
$filesystem->put($file, $contents);
$this->assertTrue($filesystem->isFile($file));
$this->assertEquals($contents, $filesystem->get($file));
}
据我从文档中可以看出,这应该可以工作,但显然我对它的阅读是不正确的,而且我在某些地方出了差错。
关于如何解决此问题的任何提示,因为我一直在一遍又一遍地改变线路,并且无法为我的生活弄清楚。
先感谢您!