我正在为我的核心库更新单元测试,遇到了一个关于文件锁(flock)的场景,想看看其他人是如何实现这些类型的单元测试的。
基本上我有一个实用文件类,它将内容写入文件:
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');
抛出异常。相反,我的单元测试只是无限期地挂起。
测试文件是否有锁的正确方法是什么?
提前致谢。