PHPUnit3で始めるユニットテスト

第3回 ショッピングカートクラスを作ってみる(2)

この記事を読むのに必要な時間:およそ 18 分

テストのコードカバー率を確認する

さて,Cartクラスも少しずつ大きなコードになってきていますが,すべてのコードが実行されているのでしょうか?ここで,実行されたコードのカバー率(コードカバレッジ)を確認してみましょう。PHPUnit3はPHP拡張モジュールであるXdebugと組み合わせることで,コードのカバー率を確認することができます。XdebugはPECLパッケージとして提供されていますので,インストールは以下の手順で行うことができます。

$ su -
# pecl install -a xdebug
# echo "zend_extension=/usr/local/lib/php5/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so" >> /usr/local/lib/php5/ini/5.2.3/php.ini
#

インストール後,正しくインストールされているかどうか確認します。

$ php -i | grep -i "xdebug support"

xdebug support => enabled
# 

また,phpunitコマンドのヘルプを表示すると,追加オプションである「--coverage-xml」「--report」が使用可能になっていることが分かります。

$ phpunit --help
PHPUnit 3.1.7 by Sebastian Bergmann.

Usage: phpunit [switches] UnitTest [UnitTest.php]

  --log-graphviz <file>  Log test execution in GraphViz markup.
  --log-json <file>      Log test execution in JSON format.
  --log-tap <file>       Log test execution in TAP format to file.
  --log-xml <file>       Log test execution in XML format to file.

  --coverage-xml <file>  Write code coverage information in XML format.
  --report <dir>         Generate combined test/coverage report in HTML format.
  --test-db-dsn <dsn>    DSN for the test database.
  --test-db-log-rev <r>  Revision information for database logging.
  --test-db-log-info ... Additional information for database logging.

  --testdox-html <file>  Write agile documentation in HTML format to file.
  --testdox-text <file>  Write agile documentation in Text format to file.

  --filter <pattern>     Filter which tests to run.
  --loader <loader>      TestSuiteLoader implementation to use.
  --repeat <times>       Runs the test(s) repeatedly.

  --tap                  Report test execution progress in TAP format.
  --testdox              Report test execution progress in TestDox format.

  --no-syntax-check      Disable syntax check of test source files.
  --stop-on-failure      Stop execution upon first error or failure.
  --verbose              Output more verbose information.
  --wait                 Waits for a keystroke after each test.

  --skeleton             Generate skeleton UnitTest class for Unit in Unit.php.
  --help                 Prints this usage information.
  --version              Prints the version and exits.

  -d key[=value]         Sets a php.ini value.
$ 

Xdebugを正しくインストールできたら,早速コードカバー率の結果を出力させてみましょう。

$ phpunit --report ./report CartTest
 PHPUnit 3.1.7 by Sebastian Bergmann.

..........

Time: 0 seconds


OK (10 tests)

Generating report, this may take a moment.sh: neato: command not found

$ 

実行後,カレントディレクトリ直下にreportディレクトリが作成され,HTMLファイルやCSSファイルが生成されていることを確認してください。また,index.htmlをブラウザで開くと次のように表示されていると思います。

画像

また,「Cart.php」のリンクをクリックすると,行単位の結果が表示されます。

画像

これらの結果を見ると,すべてのコードが実行されており,コードカバー率は充分であると判断できます。これでCartクラスもほぼ完成です。

著者プロフィール

下岡秀幸(しもおかひでゆき)

PHP関連の情報サイト「Do You PHP?」の管理人。PHP歴は長いが,あまり仕事で使ったことがないという噂がある。最近はα版のPEAR・PECLに手を出しては地雷を踏んでいることが多い。

URLhttp://www.doyouphp.jp/http://d.hatena.ne.jp/shimooka/

コメント

  • 結果が違うと思う。

    testAddUpperLimit()
    は『.』じゃなくて『F』になる。

    Commented : #1  オガーン (2014/05/07, 23:58)

コメントの記入