(※諸事情によりテスト実行の準備を省略している、後で加筆したい。)
テストコードを読む
もし、前述のフィボナッチ数列を出力するコードにテストコードがあれば、コードを実行しなくても理解できた可能性が高い。テストコードは、欠陥の検出につかうツールでもあり、コードの振る舞いについて表現したドキュメントにもなるからだ。
フィボナッチ数列を出力するコード(再掲)
<?php // nazono.php function nazono() { $a = 0; $b = 1; for ($i = 1; $i <= 10; $i++) { $l = $a; $a = $b; $b += $l; print "$a\n"; } } nazono();
nazono()
関数がどのように使われているか調べようとして、定義箇所で、Command+B (Mac), Ctrl+B (Win)を押したときに、テストコードが引っかかったらラッキーかもしれない。移動してみよう。
ちなみにテストコード例。
<?php namespace Nazono\Tests\Unit; require_once __DIR__ . '/../../nazono.php'; class NazonoTest extends \PHPUnit\Framework\TestCase { public function testNazono() { // 実コードを呼び出す nazono(); // 想定した出力 $expectOutput = <<<OUT 1 1 2 3 5 8 13 21 34 55 OUT; $this->expectOutputString($expectOutput); } }
期待される出力がテストコードに書かれている。 コードを実行した結果をみるのと同じ効果が得られるのがわかると思う。
テストを実行する・書く(変更する)
- Mac: Shift+Ctrl+R, Win/Linux: Shift+Ctrl+F10
上記のテストを実行してみる、成功したら、「生きた」テストであることがわかる。
失敗したら、実コードかテストコードのどちらかが間違っている可能性がある。*1
もしプログラムの正しい振る舞いが分かっていれば、テストコードか実コードを変更することで、実コードへの理解が深まるかもしれない。 テストを書くのが楽になる機能に「Auto-test」がある。有効にすると、ファイル変更を検知して、自動で再テストしてくれる。
もし複雑なコードを良く理解しないといけない場合、テストがコードを理解するためのツールになると思う。
目次
*1:それ以外の、テストのセットアップができていない可能性もある