2016-09-26 218 views
0

有沒有辦法模擬/覆蓋內置功能shell_execPHPUnit。我知道Mockery,我不能使用除PHPUnit之外的其他庫。我嘗試了3個多小時,並在某處卡住了。任何指針/鏈接將不勝感激。 我正在使用Zend-framework2PhpUnit模擬內置功能

回答

4

有幾種選擇。例如,您可以在測試作用域的名稱空間中重新聲明php函數shell_exec

檢查參考這個偉大的博客文章:PHP: 「Mocking」 built-in functions like time() in Unit Tests

<php 
namespace My\Namespace; 

/** 
* Override shell_exec() in current namespace for testing 
* 
* @return int 
*/ 
function shell_exec() 
{ 
    return // return your mock or whatever value you want to use for testing 
} 

class SomeClassTest extends \PHPUnit_Framework_TestCase 
{ 
    /* 
    * Test cases 
    */ 
    public function testSomething() 
    { 
     shell_exec(); // returns your custom value only in this namespace 
     //... 
    } 
} 

現在,如果你使用的全局shell_execMy\Namespace類內部功能將使用您的自定義shell_exec函數。

+0

只有當您的測試腳本和實際腳本位於相同的命名空間時,您的方法纔有效。我的命名空間位於單獨的命名空間中。 – Thabung

+0

爲此,您的測試的名稱空間應與SUT(被測系統)的名稱空間相匹配。這是一種常見的方法。另請參閱[此問題](http://stackoverflow.com/q/8313283/1697459)或[此問題](http://stackoverflow.com/q/12117254/1697459)以供參考。 – Wilt

+0

不錯的方法;) – hassan