2013-02-21 63 views
2

我想測試一個調用exec()的php函數,那麼最好的方法是什麼?我用它來獲得的git describe結果:爲對象執行exec創建測試()

class Version 
{ 
    public function getVersionString() 
    { 
     $result = exec('git describe --always'); 

     if (false !== strpos($result, 'fatal')) { 
      throw new RuntimeException(sprintf(
       'Git describe returns error: %s', 
       $result 
      )); 
     } 

     return $result; 
    } 
} 

所以我想如果執行命令來測試,並在發生錯誤時,拋出異常(即「預期」的行爲和「例外」的行爲)。

class VersionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testVersionResultsString() 
    { 
     $version = new Version(); 
     $result = $version->getVersionString(); 

     $this->assertEquals('...', $result); 
    } 

    public function testVersionResultHasFatalErrorThrowsException() 
    { 
     // trigger something that will cause the fatal 
     $this->setExpectedException('RuntimeException'); 

     $version = new Version(); 
     $result = $version->getVersionString(); 
    } 
} 

過程中的類和測試的是真正比較複雜一點,但本質是捕捉exec()地方。任何想法如何?

回答

2

如果你使用的命名空間,有一招模擬內置功能,描述如下:https://stackoverflow.com/a/5337635/664108

所以,基本上你可以用自己的函數,它的返回值將被指定替換exec您試驗。