5

非常に高いコードカバレッジを目指しており、例外クラスをカバーするか、コードカバレッジレポートから除外したいと考えています。

サンプルコード

class My_DataException extends Exception
{}

class Foo
{
   function __construct() { throw new My_DataException('see?'); }
}

My_DataException(library / My / DataException.php内)でコードカバレッジを取得するか、ファイルをコードカバレッジレポートに表示しないようにするにはどうすればよいですか?アノテーションメソッド(@codeCoverageIgnoreなど)は使用したくないです。

私のphpunit.xmlにはブラックリストが定義されており、ホワイトリストはありません

<filter>
    <blacklist>
        <directory suffix="Exception.php">../library/</directory>
    </blacklist>
</filter>

すべての例外ファイルは「Exception.php」で終わるので、サフィックス部分が機能しない理由がわかりません。

追加の詳細:

  • これは、適切なカバレッジ量についての質問ではありません
  • 各例外ファイルでアノテーションメソッドを使用したくない
  • すべての例外ファイルは「Exception.php」で終わります。My/Exception.phpまたはMy/DataException.php
4

2 に答える 2

3

次のコードの場合:

class Foo
{
    function __construct() {
        throw new My_DataException('see?');
    }
}s

テストでその行を実行すると、コードカバレッジが得られます。

new Foo;

このようなテストでは、アノテーションを使用して、どの例外が発生するかをPhpunitに伝えることができます。

/**
 * @expectedException My_DataException
 */

ただし、例外は通常例外であるため、カバーしませんが、安全上の理由から例外が存在する可能性があり、test-setup / data/parametersを使用して例外をトリガーする方法がわかりません。

次に、よく考えて、それらをトリガーしてみてください。そうしないと、技術的には例外をスローできないため、コードが不要になる可能性があります。したがって、例外は必要ありません。

それらが発生する可能性があることはわかっているが、それでもトリガーできない場合(それは可能ですか?)、スクリプトの特定の領域をソースコードのカバレッジレポートから除外するようにマークできます。

// @codeCoverageIgnoreStart
throw new My_DataException('see?');
// @codeCoverageIgnoreEnd

将来これを削除したい場合は、まばらに使用してください。

于 2012-08-10T08:28:17.430 に答える
-1

私は実際の例外ファイルをカバーする方法を探していました、これは私が最終的に答えに出くわした方法です:

<?php

/**
 * Simple test for exception
 */
class Api_ExceptionTest extends PHPUnit_Framework_TestCase
{
    /**
     * Test can construct the exception, then throw it.
     *
     * @expectedException Api_Exception
     */
    public function testThrowException()
    {
        $exception = new Api_Exception();
        throw $exception;
    }
}   
于 2012-09-21T23:13:08.927 に答える