PHPUnitの概要と導入
テスト・ケースの実装と実行結果(1)
それでは、getMessage()メソッドが正しく"hello world"という文字列を返しているか確認するテストを書いてみます。ユニット・テストでは、assertTrue()、assertEquals()、assertNull()などのアサーション・メソッドを使って、プログラムの実行結果の成功と失敗を判定させます(図3-1)。
図3-1で使っているassertEquals()は、2つの引数が同じ値の場合に成功と判定するので、テスト対象プログラム(Hello.php)のコードでgetMessage()が"hello world"という文字列を返した場合に成功と判定するようにテストを作成することができます。
編集したテスト・ケースをテストしてみます。
<code> $ phpunit HelloTest ---実行結果:ここから--- PHPUnit 3.4.11 by Sebastian Bergmann. . Time: 0 seconds, Memory: 3.50Mb OK (1 test, 1 assertion) ---実行結果:ここまで--- </code>
正常に、1個のテスト(1個のアサーション)が実行されたことが分かります。
<code> public function testGetMessage() { $this->assertEquals("hello world", $this->object->getMessage()); } </code>
図3-1:アサーション・メソッド
<code> public function testGetMessage() { $this->assertEquals("world", $this->object->getMessage()); } </code>
図3-2:失敗するテスト・ケース
テストケースの実装と実行結果(2)
今度は、あえてテストが失敗するようにコーディングしてみます(図3-2)。編集したテスト・ケースをテストし てみます。
<code> $ phpunit HelloTest ---実行結果:ここから--- PHPUnit 3.4.11 by Sebastian Bergmann. F Time: 0 seconds, Memory: 3.50Mb There was 1 failure: 1) HelloTest::testGetMessage Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -world +hello world /tmp/HelloTest.php:39 FAILURES! Tests: 1, Assertions: 1, Failures: 1. ---実行結果:ここまで--- </code>
最終行に"Failures: 1"と表示されていることから、1件失敗があることが分かります。また、中央部の"Failed asserting that two strings are equal."の下に、期待していた文字列と実際に取得した文字列が(差分を表示する)diff形式で出力されています。
このように、PHPUnitを使うと、テスト対象のプログラムからテスト・ケースのひな型を自動生成でき、テスト・メソッドの中でアサーション・メソッ ドを呼び出すことで、テストの期待値と実際の結果を比較させることができます。
今回は、PHPunitの基本を理解できるよう、簡単なテスト・ケースを紹介しました。次回は、より現実的な利用方法を紹介します。