2017-02-10 3 views
1

プライベート&の保護されたメソッドをPhpUnitのコードカバレッジレポートから隠すことはできますか? プライベート+保護されたメソッドをコードカバレッジレポートから隠す?

は、私はいくつか他の人が1が「間接的に」それらをテストする必要がありますが、私は本当に、彼らが呼び出される場合は気にしたりせず、私は私がのため @coversを設定することは時間の全くの無駄だとは思わない ことを示唆している知っていますプライベートユーティリティメソッド。

<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 IMOの価値はありません。減少を返す。単体テストは出力が正しいことを保証し、コードカバレッジはすべての異なるシナリオがヒットしたことをテストします。おそらく私の個人的なユーティリティメソッドのいくつかを過度に一般化したとしても、自分のlibにあるすべてのコード行を確実に実行する必要がありますか?私はそうは思わない。 – mpen

+0

この場合、コードカバレッジをオフにしてください。それ以外の場合は、パブリックメソッドimhoにのみ適用するのは意味がありません。 – DonCallisto

答えて

2

まあ、私の知る限りでは、それはPHPUnitの機能ではありません、あなたはphp-code-coverageプロジェクトをforkし、ソースコードを編集する必要があります。ここでは

は、あなたがそれを見るために必要がある場合は、私のphpunit.xmlです。おそらくそれはあなたが探している答えではありませんが、これは今の唯一の選択肢だと思われます。

変更がかなり簡単です。あなたは、メソッドgetSomethingCodeCoverage::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 を編集可能性@codeCoverageIgnoreまたはその他のドキュメントブロックを使用せずに無視されます。

関連する問題