2016-08-04 11 views
0

プロバイダ内でプロパティmockを正常に初期化した後(プロパティを引数として渡したいので、これを行います。プロバイダで初期化されていないとエラーが発生します) propはnullです)、それをテストに渡すと問題が発生します。プロパティはnullで上書きされます。プロバイダでプロパティが正常に設定されています

class Test extends \PHPUnit_Framework_TestCase 
{  
protected $mock;  

/** 
* @param $arg List of objects from DB  
* 
* @dataProvider providerTest 
*/ 
public function test($arg) 
{ 
    var_dump($this->mock) // ---> NULL 
} 


public function providerTest() 
{ 
    $this->mock = $this->getMockBuilder(Currency::class) 
     ->disableOriginalConstructor() 
     ->getMock(); 

    var_dump($this->mock) // -----> OBJECT 

    return array(   
     array('argument') 
    ); 
    } 
} 

答えて

1

私はあなたがこれがなぜ起こるかを知りたいと仮定します。 PHPUnitののdocumentationは、実際にこれを説明する:

すべてのデータプロバイダがsetUpBeforeClass静的メソッドの呼び出し方法と設定方法の最初の呼び出しの両方の前に実行されているノート

。そのため、データプロバイダ内で作成する変数にはアクセスできません。これは、PHPUnitが総テスト数を計算できるようにするために必要です。

class Test extends \PHPUnit_Framework_TestCase 
{  
    protected $mock; 

    protected function setUp() 
    { 
     $this->mock = $this->getMockBuilder(Currency::class) 
      ->disableOriginalConstructor() 
      ->getMock(); 
    } 

    /** 
    * @param $arg List of objects from DB  
    * 
    * @dataProvider providerTest 
    */ 
    public function test($arg) 
    { 
     var_dump($this->mock) // ---> MockObject 
    } 

    public function providerTest() 
    { 
     return array(   
      array('argument') 
     ); 
    } 
} 

ですから、データプロバイダを使用した試験方法で直接setUp()方法にMockObjectの作成を移動したりする必要がありどちらか

関連する問題