私はコア ライブラリの単体テストの更新に取り組んでおり、ファイルロック (群れ) に関するシナリオに出くわし、他の人がこれらの種類の単体テストをどのように実装したかを知りたいと思いました。
基本的に、コンテンツをファイルに書き込むユーティリティ File クラスがあります。
class CoreLib_Api_File_Package
{
public static function write(array $options)
{
...
if (!$file->flock(LOCK_EX)) {
throw new CoreLib_Api_Exception('Unable to obtain lock on file');
}
...
}
}
そして私の単体テストは次のようになります:
public function testWriteException_UnableToSecureLock()
{
$this->touchFile($this->destFileUri);
$file = new SplFileObject($this->destFileUri, CoreLib_Api_File::MODE_WRITE);
$file->flock(LOCK_EX);
CoreLib_Api_File_Package::write(array('fileUri' => $this->destFileUri, 'content' => $this->testContent, 'mode' => CoreLib_Api_File::MODE_WRITE));
}
テスト コードからわかる$this->destFileUri
ように、メソッドへの API 呼び出しを行う前に、明示的なロックを設定していますwrite()
。私が期待するのは、例外throw new CoreLib_Api_Exception('Unable to obtain lock on file');
がスローされることです。代わりに、単体テストが無期限にハングします。
ファイルがロックされているかどうかをテストする適切な方法は何ですか?
前もって感謝します。