2014-02-26 21 views
0

如果我有以下方法:phpspec - 斷言對象方法調用過程中,改變

function changeObject($object) { 
    $object = new \stdClass(); 
} 

這是一個非常愚蠢的例子,但它是用來說明我的問題。

傳遞的對象可能會在方法調用期間更改,但方法不會返回該對象。

使用phpspec我怎麼能斷言對象被修改?

回答

0

我不知道有沒有一種有效的方式來做到這一點,而不嘲笑。退房Phake

Phake是一個模擬框架,它允許您在測試中模擬對象,並驗證它們調用某些方法,或強制它們在測試中返回某些輸出。

+0

模擬不會幫助你,因爲沒有方法調用。 –

1

幸運的是,這在PhpSpec中並不容易,也沒有任何其他測試框架。對象在PHP中通過引用傳遞。如果更改引用,則不再有可以比較的對象。您必須複製原始對象並根據其屬性進行比較。不是一個好主意。

修改參數的方法通常是不好的做法,至少是一個壞主意。通常該方法的客戶不期望修改。 我寧願考慮如何更好地設計你的班級。

你的例子並沒有很好地描述你的問題。如果你給了更好的一個,我們可以提供更好的幫助。

如果你只想驗證一個方法是在一個對象上調用的(而不是從你的例子中改變引用),使用mocks。