0

標準の phpdoc @method 構文を使用して、クラスで宣言されているいくつかのメソッドがあります。次に例を示します。

/**
 * @method string magicMethod(int $arg1, array $arg2) Method description.
 */
class ... { }

メソッドレベルのコードカバレッジを決定するときに、これらのコメントをチェックするように PHPUnit を設定することは可能ですか? 現在、これらの魔法のメソッドの約 10% しか触れていませんが、カバー率は 100% です。

4

3 に答える 3

3

コード カバレッジは、「仮想」メソッドではなく、既存のコードに基づいてのみ計算できます。

より現実的な統計を取得するには、意図せずに生成されるカバレッジの量を減らす必要があります。PHPUnit は、デフォルト設定を使用した場合に実行されるコードのすべての行に対してカバレッジを生成します。これは悪いことです。アサーションでテストされない行に沿って意図せずに実行すると、カバレッジは何も教えてくれません (エラーが発生しなかったという事実)。

マニュアルのコード カバレッジの章を見ると、テストでテストするメソッドを指定でき、それらのメソッドのみがカバレッジ統計を生成していることがわかります (セクション「対象となるメソッドの指定」)。

私が好む方法は、phpunit.xml ファイルmapTestClassNameToCoveredClassName="true"でオプションを設定し、テストするすべてのクラスをホワイトリストに追加することです。こうすることで、カバレッジは、テスト クラスと同じ名前 (接尾辞 "Test" を除く) を持つクラスのみに自動的に制限されます。したがって、テスト「MyGreatModelTest」がある場合、「MyGreatModel」クラスの任意のメソッドでのみカバレッジが作成され、他の場所では作成されません。

また、コードを含むディレクトリ全体をホワイトリストに追加すると、0 % のカバレッジを生成したため、これまで統計に含まれていなかったすべてのファイルも検出されます。

注意: これらの設定は気分を害するかもしれませんが、テスト中に実際に実行されるコード行と、副作用としてのみ渡されるコード行をより現実的に把握できます。

于 2013-09-16T22:49:43.897 に答える