Go for it!

モーターサイクルと自転車とキャンプの日々。

PHPコードカバレッジの計測

※当たり障り無い内容なので某所から転記

xdebugとlimeを使うと出来る。

試験用に短い関数を作る。

[code lang=“php”] <?php function test_function($a) { switch ($a) { case “aaa”: return true; case “bbb”: return false; case “ccc”: default: return null; } } [/code]

test_function()のテストを書く。カバレッジを計測するため、意図的に引数にcccを与えた場合の処理は書いていない。

[code lang=“php”] <?php require(“/opt/local/lib/php/symfony/vendor/lime/lime.php”); require(“function.php”);

$t = new lime_test(2, new lime_output_color()); $t->is(test_function(“aaa”), true); $t->is(test_function(“bbb”), false); ?> [/code]

テストの実施とカバレッジ測定を行うコードを書く。

[code lang=“php”] <?php require(“/opt/local/lib/php/symfony/vendor/lime/lime.php”);

// テストの実施 $h = new lime_harness(new lime_output_color()); $h->register(“functionTest.php”); $h->run();

// カバレッジ計測 $c = new lime_coverage($h); $c->base_dir = realpath(dirname(FILE)); $c->register($c->base_dir.“/function.php”); $c->run(); ?> [/code]

実行すると以下のようになる。 [code lang=“python”] $ php functionTestDo.php functionTest…………………………………………………ok All tests successful. Files=1, Tests=2 function 57% TOTAL COVERAGE: 57% [/code]

57%しかカバーされてないのでこのテストはイケてない。functionTest.phpを編集し、lime_test()への引数を増やしてファイルの末尾にテストを足した。

[code lang=“php”] <?php require(“/opt/local/lib/php/symfony/vendor/lime/lime.php”); require(“function.php”);

$t = new lime_test(3, new lime_output_color()); $t->is(test_function(“aaa”), true); $t->is(test_function(“bbb”), false); $t->is(test_function(“ccc”), null); [/code]

再度実行してみると… [code lang=“python”] $ php functionTestDo.php …………………………………….ok All tests successful. Files=1, Tests=3 function 100% TOTAL COVERAGE: 100% [/code]

カバレッジ100%!

ユニットテストにしか使えないかな?

遷移を伴う複雑なテストケースに適用出来るかは今後調べてみる(かも知れない)。

[ad#text_wide]