2015-09-21 44 views
1

目前我嘗試將PHPUnit集成到我的項目中。 爲了確保100%的測試覆蓋率,我希望檢查類中存在的所有方法是否在測試類中進行測試。 所以我想,但是我可以寫類似PHP - ReflectionClass - 僅適用於當前類的getMethods

class MyClassTest extends PHPUnit_Framework_TestCase { 

    private function _getClassFunctions($class) { 
     $class = new ReflectionClass($class); 
     return $class->getMethods(); 
    } 

    public function testCompareFunctionCount() { 
     $this->assertEquals($this->_getClassFunctions('MyClass'), $this->_getClassFunctions(__CLASS__)); 
    } 
} 

看來,這ReflectionClass ::的getMethods()計算不僅是類本身的方法,也是所有擴展類。 有沒有辦法來防止這種行爲?還是我得到了完全錯誤的東西?我在舊文章中看到ReflectionClass :: getMethods()在舊版PHP版本上無法正常工作,但我認爲它現在可能已被修復(這些文章已超過4年了)
我使用PHP 5.4.5。

回答

1

你必須做一些工作你自己:

private function _getClassFunctions($className) { 
    $class = new ReflectionClass($className); 
    $result = array(); 
    foreach($class->getMethods() as $method) { 
     if ($method->class == $className) { 
     $result[]=$method; 
     } 
    } 
    return $result; 
} 

比較$method->class$className縮小結果中唯一的問題包含在類中的方法。

+0

這正是我所需要的。 非常感謝! :) –

相關問題