問題:如何對類中的private方法進行測試?
大多數時候,private都是給public方法呼叫的,其實只要測試public即可。但是有時由於邏輯複雜等原因,乙個public方法可能包含了多個private方法,再加上各種if/else,直接測public又要覆蓋其中每個private方法的n多情況還是比較麻煩的,這時候應該考慮單對其中的private方法時行測試了。那麼如何進行呢?
思路:通過反射機制,在testcase中將私有方法設為「可訪問」,從而實現對私有方法的測試。
假設我們要對下面這個類的sub方法進行測試
class demo
}
測試類如下:
class demotest extends phpunit_framework_testcase
}
好了,現在你可以順利的測試private方法了。
對於protected方法也可以用這種方法測試,但個人更推薦使用繼承的思路去測(詳見
注意:因為setaccessible方法,只在php5.3.2以上的版本才有,所以此方法有一定侷限性。這也是為什麼對protected方法更建議用繼承的思路去測。
附:測試類改寫為下面這種方式,個人感覺更清晰。
//改寫乙個sub方法,與demo類相同,只是將其變成public
class demofortest extends demo
}class demotest extends phpunit_framework_testcase
}
如何訪問類中的private成員變數
總所周知,類中的private屬性的成員變數在類外是無法訪問的,今天我們 的就是如何在類外訪問private屬性的成員變數。我們先來看乙個簡單的例子 class stu private int x int y int main 通過上面的 我們可以知道,方法是把類物件的位址強制轉化為int 型別,因...
C 類中對同類物件private成員訪問
本文 私有成員變數的概念,在腦海中的現象是,以private關鍵字宣告,是類的實現部分,不對外公開,不能在物件外部訪問物件的私有成員變數 然而,在實現拷貝建構函式和賦值符函式時,在函式裡利用物件直接訪問了私有成員變數,因而,產生了困惑 下面以具體例項進行說明 疑惑 為什麼第26行和第32行 可以編譯...
如何突破類private的訪問控制限制
類的訪問控制許可權如下 訪問public protected private 同乙個類 yesyes yes派生類 yesyes no外部及外部類類 yesno no接下來主要說一下外部函式及外部類幾種突破private訪問許可權的方法。include using namespace std cla...