2016-09-26 7 views
0

組み込み関数shell_execPHPUnitにモック/オーバーライドする方法はありますか?私はMockeryを認識しており、PHPUnit以外のライブラリを使用することはできません.3時間以上かけて試してみました。どんなポインタ/リンクも高く評価されます。 私は使用していますZend-framework2PhpUnitは組み込み関数をモックします

答えて

4

いくつかの選択肢があります。たとえば、テストスコープの名前空間にPHP関数shell_execを再宣言することができます。

この素晴らしいブログ記事を参考にして確認してください:PHP: “Mocking” built-in functions like time() in Unit TestsあなたのMy\Namespaceにクラス内でグローバルshell_exec機能を使用した場合

<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_exec機能を使用します。

+0

あなたのアプローチは、テストスクリプトと実際のスクリプトが同じ名前空間にある場合にのみ機能します。Mineは別の名前空間にあります。 – Thabung

+0

これを行うには、テストの名前空間がSUT(テスト対象システム)の名前空間と一致する必要があります。これは一般的なアプローチです。参考までに[この質問](http://stackoverflow.com/q/8313283/1697459)または[この質問](http://stackoverflow.com/q/12117254/1697459)もお読みください。 – Wilt

+0

すてきなアプローチ;) – hassan

関連する問題