2016-08-04 57 views
0

後,我在商成功初始化屬性mock(我這樣做是因爲我想通過財產作爲參數,如果沒有在提供初始化,發生的原因錯誤道具爲空),並把它傳遞給測試,我有一個問題:屬性被改寫爲空物業在測試覆蓋爲空提供商成功設置

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來能夠計算測試的總數。

所以,你要麼移動MockObject的創建到setUp()方法或直接使用數據提供的測試方法:

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') 
     ); 
    } 
}