我正在爲我的核心庫更新單元測試,並且遇到了關於filelocks(flock)的場景,並且想知道其他人如何實現這些類型的單元測試。PHP - PHPUnit - 測試保護文件鎖的能力
基本上我有一個utlity文件類會寫內容到一個文件:
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));
}
你可以從測試代碼,我看在對write()
方法進行API調用之前,對$this->destFileUri
進行明確鎖定。我期望的是拋出異常throw new CoreLib_Api_Exception('Unable to obtain lock on file');
。相反,我的單元測試只是無限期地掛起。
什麼是正確的方式來測試一個文件是否有鎖?
在此先感謝。
感謝您的回覆。我也讀過那篇文章,只是好奇別人怎麼解決這個問題。我打算讓這個問題持續幾天,看看我能否得到其他答案,如果不能,我會接受這個問題。 – 2012-02-04 00:10:47
劃痕,LOCK_NB工作正常。謝謝。 – 2012-02-04 00:17:12