2017-06-15 71 views
2

我正在鎖定一種方式來模擬對象並填充其屬性。 這裏是誰使用另一個對象的屬性的方法的一個例子:PHPUnit模擬對象的屬性

class MyClass { 

    private $_object; 

    public function methodUnderTest($object) { 
     $this->_object = $object; 
     return $this->_object->property 
    } 
} 

進行單元測試這種方法我應該創建的$object一個模擬與PHPUnitgetMockBuilder()方法。但我找不到方法來模擬$object的屬性,只是方法。

+1

爲什麼不直接設置這些屬性而不嘲笑它們? – akond

+0

我確實試圖這樣做,但不知道爲什麼它從來沒有工作,直到今天。 感謝您的支持,您實際上可以設置模擬對象的屬性,就像您通常使用對象一樣 –

+0

幸運的是,我並不完全瘋狂,您提出的簡單解決方案對我的大多數課程都能正常工作,但對於一對夫婦來說,它不起作用,它只是返回NULL值 –

回答

2

將屬性添加到一個嘲笑的對象,你只需將它們設置爲您通常會與對象做:

$mock = $this->getMockBuilder('MyClass') 
      ->disableOriginalConstructor 
      ->getMock(); 

$mock->property = 'some_value'; 

$mock->property現在返回'some_value'

由於akond

Ps對於我的項目,這不適用於某些類,並且當我嘗試撥打$mock->property時,它只返回NULL

+1

確保你不使用原始類中的魔術方法。 – vivanov