簡體   English   中英

phpunit中具有受保護方法的抽象類

[英]Abstract class with protected methods in phpunit

我一直在嘗試在抽象類上使用phpunit進行測試,該抽象類包含將由其子級共享的受保護方法。 我一直在閱讀有關不應測試私有/受保護方法的信息,因為這會使代碼變得脆弱。 在這種情況下,我既不希望這些方法成為公共API(盡管這不會造成傷害,但它感覺不對勁),也不要在每個孩子中測試同一個父操作是否執行正確。

因此,作為一個示例解釋更多,我將嘗試發布一個簡單的示例

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(將所有方法標記為public),您會不會對要調用的方法感到困惑?

謝謝你們。 我認為這個問題很棘手,需要一些觀點來研究,因此,我感謝您的評論

創建一個TestAuth類,並在使用它而不是真實的* Auth對象的AbstractAuthenticatorTest中測試受保護的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM