次のシナリオを検討してください (これは製品コードではありません)。
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.");
}
}
}
右、それで問題は何ですか?コード カバレッジは、この行がカバーされていないことを報告します。
throw new Exception("Cannot open file handle.");
これは正しいですが、上記のフォルダーを論理的に作成しているため、失敗することは不可能に思えますfopen()
(ディスクが 100% のような極端な状況を除いて)。
コード カバレッジからコードを無視することもできますが、それは一種の不正行為です。myFile.txt
ファイルを作成できないファイルシステムを認識してモックできるように、ファイルシステムをモックする方法はありますか?