2017-02-07 155 views
1

有沒有辦法測試一個類的受保護或私有方法?現在,我正在公開許多方法,以便能夠對它們進行測試,這會打破API。如何對受保護的方法進行單元測試?

編輯:這裏其實回答:

class Foo 
{ 
    protected function doThings($foo) 
    { 
     //... 
    } 
} 


class _Foo extends Foo 
{ 
    public function _doThings($foo) 
    { 
     return $this->doThings($foo); 
    } 
} 

,並在測試::

$sut = new _Foo(); 
$this->assertEquals($expected, $sut->_doThings($stuff)); 

隨着私家Best practices to test protected methods with PHPUnit

回答

0

對於受保護的方法,你可以在測試子類類方法有點困難,您可以使用Reflection API調用受保護的方法。此外,還有一種觀點認爲私有方法應該在重構過程中才會出現,所以應該由調用它們的公共方法來覆蓋,但只有在您開始測試時纔會真正起作用,並且在現實生活中我們使用遺留代碼對付;)

鏈接反射API:

http://php.net/manual/en/reflectionmethod.setaccessible.php

而且,這個鏈接看起來有用用於這一目的:

https://jtreminio.com/2013/03/unit-testing-tutorial-part-3-testing-protected-private-methods-coverage-reports-and-crap/

+0

PSR-2不接受p在一個文件中放兩個類。所以我不確定子類是不錯的選擇。感謝與反射的提示。 –

+0

絕對正確,在相同的'文件'中僅用於演示目的....事實上,使用PHP 7對於匿名類非常有用...... – malte

相關問題