2017-02-10 3 views
1

Могу ли я скрыть частные & защищенных методов из отчета о покрытии кода PhpUnit?Скрыть частные + защищенные методы из отчета о покрытии кода?

Я знаю, что некоторые другие люди предполагают, что один должен проверить их «косвенно», но я действительно не волнует, если они дозвонились или нет, и я думаю, что это полная трата времени для меня, чтобы создать @covers для частные методы использования.

Вот мой phpunit.xml, если вам нужно, чтобы увидеть, что:

<phpunit 
     backupGlobals="false" 
     backupStaticAttributes="false" 
     bootstrap="vendor/autoload.php" 
     colors="true" 
     convertErrorsToExceptions="true" 
     convertNoticesToExceptions="true" 
     convertWarningsToExceptions="true" 
     processIsolation="false" 
     stopOnFailure="false" 
     syntaxCheck="false" 
     timeoutForSmallTests="1" 
     timeoutForMediumTests="10" 
     timeoutForLargeTests="60"> 

    <testsuites> 
     <testsuite name="default"> 
      <directory>./tests</directory> 
      <exclude> 
       <directory suffix=".php">./src/Internal</directory> 
      </exclude> 
     </testsuite> 
    </testsuites> 

    <filter> 
     <whitelist> 
      <directory suffix=".php">./src</directory> 
     </whitelist> 
    </filter> 

    <logging> 
     <log type="coverage-html" target="./log/codeCoverage" charset="UTF-8" yui="true" highlight="true" lowUpperBound="50" highLowerBound="80"/> 
     <log type="testdox-html" target="./log/testdox.html"/> 
    </logging> 
</phpunit> 

code coverage

+2

Ну, если публичный метод основан на частных методах, почему вы их исключили? Это не имеет никакого смысла для меня, действительно :) – DonCallisto

+0

@DonCallisto Просто не стоит усилий ИМО. Уменьшение отдачи. Модульные тесты гарантируют правильность вывода, покрытие кода гарантирует, что я тестирую все различные сценарии. Действительно ли я * должен убедиться, что я выполняю каждую строку кода в моей библиотеке, даже если я, возможно, обобщил некоторые из моих личных методов утилиты? Я так не думаю. – mpen

+0

Ну, в этом случае просто отключите покрытие кода, в противном случае нет смысла применять его только к общедоступным методам imho. – DonCallisto

ответ

2

Ну, насколько я знаю, это не функциональность PHPUnit, и вы должны раскошелиться php-code-coverage проект и редактировать исходный код , Вероятно, это не тот ответ, который вы ищете, но, похоже, это единственный вариант прямо сейчас.

Это утешительно, что изменения довольно просты. Вы можете редактировать CodeCoverage::getLinesToBeIgnoredmethod и добавить дополнительное условие

if (get_class($token) == 'PHP_Token_FUNCTION') { 
    $methodVisibility = $token->getVisibility(); 

    if ($methodVisibility == 'private' || $methodVisibility == 'protected') { 
     $endLine = $token->getEndLine(); 

     for ($i = $token->getLine(); $i <= $endLine; $i++) { 
      self::$ignoredLines[$filename][$i] = TRUE; 
     } 
    } 
} 

enter image description here Метод getSomething игнорируется без использования @codeCoverageIgnore или каких-либо других DOC блоков.

Смежные вопросы