[英]Testing with vsfStream and PHP Unit
因此,我目前正在進行單元測試,在旅行中,我發現可能還需要模擬文件系統以及數據庫查詢等。
我從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));
}
據我從文檔中得知,這應該可行,但是顯然我的閱讀是不正確的,而且我在某些地方走錯了。
關於如何解決此問題的任何提示,因為我一直在改變路線,無法終生解決。
先感謝您!
我似乎已經解決了這個問題。 修復方式...不太令人滿意,也許有人可以幫忙解釋一下我很樂意的原因。
public function testCanPutFile()
{
$dir = vfsStream::url($this->root->path()) . '/sub-dir';
$file = $dir . '/test.txt';
$contents = "test text";
$filesystem = $this->filesystem;
$this->assertTrue($filesystem->makeDirectory($dir));
$this->assertTrue($filesystem->isDirectory($dir));
$filesystem->put($file, $contents);
$this->assertTrue($filesystem->isFile($file));
$this->assertEquals($contents, $filesystem->get($file));
}
我是如何解決此問題的。 看來我必須按照測試方法重新創建結構。 我真的不明白為什么我必須這樣做。 也許我在這里遺漏了一些東西,但是我看不到我在做錯什么,並且互聯網上只有很少的像樣的例子,其中大多數可以在作者GitHub Wiki上找到。 我確實相信我可能已經誤讀了文檔,因此也非常感謝您對此問題進行更正。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.