PHPUnitの概要と導入
PHPUnitのテスト・ケース
次に、このテスト手順をPHPUnitを使って実行してみます。
PHPUnitで実行させるテスト・プログラムは、テスト・ケースと呼ばれるPHPのプログラムです。1から自分で記述するよりも、phpunitコマンドを使ったほうが、テスト対象プログラム(Hello.php)からテスト・ケースのひな型ファイルを自動生成することができるので便利です。
<code>$ phpunit --skeleton-test Hello PHPUnit 3.4.11 by Sebastian Bergmann. Wrote skeleton for "HelloTest" to "/tmp/HelloTest.php". </code>
これで、テスト・ケースがHelloTest.phpという名前で生成されました(図2)。テキスト・エディタで開いて中身を確認します。
<code> <?php require_once 'PHPUnit/Framework.php'; require_once '/tmp/Hello.php'; /** * Test class for Hello. * Generated by PHPUnit on 2010-03-29 at 03:14:15. */ class HelloTest extends PHPUnit_Framework_TestCase { /** * @var Hello */ protected $object; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. */ protected function setUp() { $this->object = new Hello; } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. */ protected function tearDown() { } /** * @todo Implement testGetMessage(). */ public function testGetMessage() { // Remove the following lines when you implement this test. $this->markTestIncomplete( 'This test has not been implemented yet.' ); } } ?> </code>
図2:PHPUnitで自動生成されるテスト・ケース
テスト・プログラムの解説
作成したテスト・ケースを解説します。
10行目。テスト・ケースのクラス名は、「テスト対象クラス名+Test」となっており、PHPUnit_Framework_TestCaseクラス を継承しています。
21行目のsetUp()メソッドと30行目のtearDown()メソッドは、ユニット・テスト・フレームワークではおなじみのメソッドで、テスト・ ケースの初期化とクリーン・アップを行います。setUp()メソッドの中でHelloクラスのオブジェクトが生成されています。
37行目。testGetMessage()メソッドが、HelloクラスのgetMessage()メソッドのテスト・メソッドです。この中に、どの ようなテストを行うかをコーディングしていきます。ひな型を生成した直後では、このテスト・メソッドが未実装であることを示すために40行目のmarkTestIncomplete()メソッドが呼ばれるようになっています。
生成したテストケースを、phpunitコマンドで実行してみます。テストケースの実装が未完了なので、"Incomplete: 1"となります。
<code> $ phpunit HelloTest ---実行結果:ここから--- PHPUnit 3.4.11 by Sebastian Bergmann. I Time: 0 seconds, Memory: 3.50Mb OK, but incomplete or skipped tests! Tests: 1, Assertions: 0, Incomplete: 1. ---実行結果:ここまで--- </code>
次ページでは、getMessage()メソッドが正しく"hello world"という文字列を返しているかどうかを確認するテストを書いてみます。