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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30