我一直試圖在我的抽象類上使用phpunit進行測試,該類持有將由它的子項共享的受保護方法。我一直在閱讀有關私有/受保護方法的內容,因爲這會使代碼變得脆弱,所以不應該進行測試。在這種情況下,我不希望這些方法成爲公共API(儘管這不會造成任何傷害,但它的感覺不正確),如果同一父行爲執行得很好,我也不想在每個孩子身上進行測試。在phpunit中使用受保護方法的抽象類
所以,作爲一個例子解釋了更多,我會嘗試發佈一個簡單的
abstract class AbstractAuthenticator
{
abstract function authenticate();
protected function checkUserPrivilege()
{
... code
}
protected function checkEnvPrivileges()
{
... code
}
}
class BasicAuth extends AbstractAuthenticator
{
public function authenticate()
{
$this->checkUserPrivilege();
$this->checkEnvPrivileges();
... code
}
}
class AjaxAuth extends AbstractAuthenticator
{
public function authenticate()
{
$this->checkUserPrivilege();
$this->checkEnvPrivileges();
... code
}
}
我的問題(如果我可以做一個以上)爲:
- 此代碼是否對你有意義嗎?
- 應有的保護方法變爲公共
- 如果受保護的方法是公開的,他們應該在類的外部進行檢查或仍處於
authenticate()
- 如果你看到這個API(將所有方法標記爲公共)被稱爲止跌你不知道要調用哪些方法嗎?
謝謝大家。我認爲這個問題很棘手,需要一些觀點來看看,所以我喜歡你的意見
到目前爲止,我已經使用ReflectionClass嘗試了http://stackoverflow.com/a/5013441/1358777建議 –