WEBOPIXEL

PHPUnitでテストしよう。IntelliJ(PHPStorm)でも実行できるようにしてみた

Posted: 2013.05.20 / Category: PHP 

そろそろテストとかお勉強しないとなと思ったりしたのでとりあえず PHPUnit を導入して、簡単なコードのテストを書くとこまでやってみます。
ついでにIntelliJ(PHPStorm)でも実行できるように設定してみました。

Sponsored Link

環境はWindows7でPHPはXAMPPで入っています。
PHP 5.4 / PHPUnit 3.7

PHPUnitのインストール

PHPUnitはPEARからインストールします。
PHPの環境変数が設定していない場合は「C:\xampp\php」で設定しておきます。
管理権限でプロンプト(ターミナル)を起動します。
まずはPEARのアップデート。

pear upgrade PEAR

続いてPHPUnitのインストール。

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit

使ってみる

インストールが終わったので、早速プログラムのテストをしてみましょう。
テストするためのPHPファイルを「Hello.php」という名前で作成します。

Hello.php

    <?php
	class Hello
	{
		public function getMessage()
		{
			return "hello world";
		}
	}
	

プロンプトで「Hello.php」を作成したディレクトリをカレントにします。

テストコードのひな形を自動作成

テストコードのひな形を自動作成するためのPEARをインストールします。

pear install phpunit/PHPUnit_SkeletonGenerator

インストール完了後次のコマンドを実行します。

phpunit-skelgen --test Hello

「HelloTest.php」というPHPファイルが作成されます。
まずは「PHPUnit/Autoload.php」とテストするファイル「Hello.php」を読み込みます。

HelloTest.php

    <?php
	require_once 'PHPUnit/Autoload.php';
	require_once 'Hello.php';
	

ソースの一番下には「Hello.php」で実装した「getMessage」をテストするためのメソッド「testGetMessage」がありますので、下記のようにします。

HelloTest.php

    public function testGetMessage()
    {
        $this->assertEquals("hello world", $this->object->getMessage());
    }
	

「assertEquals」メソッドは2つの引数が等しいことを検証します。
「getMessage」は「hello world」という文字列を返しますので、テストは通るはずです。
下記コマンドでテストを実行します。

phpunit HelloTest

「OK (1 test, 1 assertion)」と表示されればテストは問題なかったということです。

IntelliJ(PHPStorm)でテストできるようにする。

「File」->「Setting」でSettingウィンドウを表示したら「PHP」の項目を選択。
「Interpreter」でPHPを選択します。

「Run」->「Edit Configurations」でClassを下記のようにするか、Directoryを選択します。

あとは「Run」ボタンでテストが実行されます。

これくらいのコードだったら全然大丈夫なのですが、フレームワークとかのテスト書こうと思うといきなり難易度高くなりませんかね。さてどうしたもんでしょ。

参考サイト

PHPUnit Manual
第1回 PHPUnitの概要と導入 | Think IT
http://www.findxfine.com/programming/php/995557148.html