次のシナリオ(これは、生産コードではありません)考えてみますので、何が問題だ、PHPUnit:このファイルシステムをどうやって模擬しますか?
class MyClass {
public function myMethod() {
// create a directory
$path = sys_get_temp_dir() . '/' . md5(rand());
if(!mkdir($path)) {
throw new Exception("mkdir() failed.");
}
// create a file in that folder
$myFile = fopen("$path/myFile.txt", "w");
if(!$myFile) {
throw new Exception("Cannot open file handle.");
}
}
}
右の?コードカバレッジは、この行がカバーされていないことを報告します正しいですが、私は、論理的に上にフォルダを作成していますので、それはfopen()
がでディスクのように、多分極端な状況を除き(失敗することは不可能と思われる
throw new Exception("Cannot open file handle.");
100%)。
私はコードカバレッジからコードを無視することができますが、それは不正なものです。 myFile.txt
を認識しファイルシステムがファイルを作成できないようにファイルシステムを模擬する方法はありますか?
私はmkdir()を渡し、fopen()をvfsで失敗させたいが、どうすれば2つの別々の関数を持たなくてもそれを設定できるのだろうか? –
上記の 'phpunit.de'リンクの' 10.15'の例から始まる 'Mocking the Filesystem'をチェックしてください。 vfsを使用する利点は、元のファイルシステムに実際の依存関係がないことです。 – raidenace