PHPUnitの概要と導入

2010年4月7日(水)
伊丹 久兼

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"という文字列を返しているかどうかを確認するテストを書いてみます。

PCIアイオス株式会社

テンアートニ(現サイオステクノロジー)、ゼンド・ジャパンなどを経て現在、PCIアイオスに勤務。これまでに組込み開発からWebシステム開発まで幅広く開発を経験。現在は、オープンソースソフトウェアを利用したシステムの開発、運用、パフォーマンスチューニングを担当。特にLAMP(Linux/Apache/MySQL/PHP)環境を得意とする。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています