2012-10-30 78 views
5

當談到PHP中魔術方法的單元測試實現時,推薦使用這些方法的方法是什麼?單元測試魔術方法

我看到三種方案可供選擇:

  • 調用它們明確/直接:

    $object->__get('someValue');

  • 間接調用它們(使用任何行動旨在觸發它們):

    $object->someValue; \\ Where __get() is implemented.

  • 使用兩種方法調用它們。

是否有任何單元測試可以解釋它(如果有的話)將是顯而易見的選擇,爲什麼這可能是老兵?

(這可能是跳舞接近主觀/爭論的領土,但我會問的希望,也有一些普遍公認的原則處理這個問題時,我應該考慮的問題。)

+0

我會說這兩個 – JvdBerg

+0

我不是專家,但似乎第一個會導致更好(自我)記錄的測試。 – SomeKittens

回答

6

您應該測試可觀察到的行爲。所以,第二個($obj->property必須被測試,沒有問題。

至於實際直接調用getter,這更多的是判斷調用。一旦你說__get('someProperty'),在我看來你幾乎已經確定它是一個神奇的屬性。由於我試圖永遠不會改變測試,如果出於某種原因,這使得事情變得複雜化,我希望這是一個普通的舊的非魔術屬性。另一方面,您可以調用getter並以其他方式獲取屬性,並確保它們都具有完全相同的結果。