2015-04-21 70 views
0

我想測試一個從其他方法獲取其數據的類方法。
所以我這樣做:phpspec強制方法返回值

function it_should_return_json_file_as_array() 
{ 
    $this->exist()->willReturn(true); 
    $this->read()->willReturn("{\"key\":\"value\"}"); 
    $this->getContent()->shouldHaveKeyWithValue('key', 'value'); 
} 

但是,當我發起phpspec run,我得到這個:

[InvalidArgumentException] 
String "" is not a valid classname. 
Please see reference document: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md 

這是怎麼回事?

+0

你也可以粘貼你正在嘗試規範的方法嗎? –

+0

public function read() { \t return file_get_contents($ this-> path); } 公共職能的getContent(){ \t回json_decode($這個 - >閱讀()); } –

回答

0

這是不可能的,因爲你正在指定的類的方法是存在的,而這是不可能的。

PhpSpec試圖告訴你,您決定設計的方式存在問題。

My top ten favourite PhpSpec limitations - Limitation #2

這種限制可以成爲使用繼承來擴展行爲的情況非常明顯。我們繼承一個類並且想要添加一個新的方法,該方法在內部將某些行爲委託給父類方法。我們不能嘲笑或存根方法。這導致我一次又一次地贊成構成而不是繼承,這是面向對象設計的一個黃金原則。在少數情況下,繼承是合理的,我們可以將可重用行爲分離爲一個單獨的對象,並在父對象中使用組合,從而允許我們用double來替換協作者。

也讀取Partial Mocking