端くれプログラマの備忘録 PHP [PHP] PHPUnitをXAMPPにセットアップする

[PHP] PHPUnitをXAMPPにセットアップする

PHPUnitはPHP版のxUnit、すなわちユニットテスト自動化のためのフレームワーク。

さほどPHP暦が長くない自分はこれまでテストを書いてこなかったのだけど、現在携わっているプロジェクトの複雑さが増すにつれてテストの必要性を感じるようになった。そこで、ローカルのXAMPP環境にPHPUnitをインストールして、テストの書き方や実施方法などを学習してみようと思う。

以下インストールの覚書。

公式サイト

PHPUnit – The PHP Testing Framework
http://phpunit.de/

PHPUnit マニュアル
https://phpunit.de/manual/current/ja/index.html

インストール

PHPUnit マニュアル – 第1章 PHPUnit のインストール
https://phpunit.de/manual/current/ja/installation.html#installation.optional-packages

1. PHP バイナリ用のディレクトリを作ります(例:C:\bin)

2. ;C:\bin を、環境変数 PATH に追記します (参考資料)。

3. https://phar.phpunit.de/phpunit.phar をダウンロードして、 C:\bin\phpunit.phar に保存します。

4. コマンドプロンプトを開きます ( Windows+R » cmd » ENTER)。

5. 以下のようにして、バッチスクリプト (C:\bin\phpunit.cmd) を作ります。

C:\Users\username\> cd C:\bin
C:\bin\> echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
C:\bin\> exit

(僕の環境はphpのパスが通っていなかったのでphpをフルパスで指定するように変更)

6. コマンドプロンプトをもう一枚開き、どこからでも PHPUnit を実行できることを確認します。

C:\Users\username\> phpunit --version
PHPUnit x.y.z by Sebastian Bergmann.

試しにテスト

PHPUnit マニュアル – 第2章 PHPUnit 用のテストの書き方
https://phpunit.de/manual/current/ja/writing-tests-for-phpunit.html

テストコード StackTest.php

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));
        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));
 
        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
?>

実行する。

C:\xampp\htdocs\test\>phpunit StackTest
PHPUnit 4.3.1 by Sebastian Bergmann.
.
Time: 31 ms, Memory: 3.75Mb
OK (1 test, 5 assertions)
C:\xampp\htdocs\test\>

参考サイト

PHP開発者のためのテストのすゝめ(1):ユニットテストはなぜ必要なの? (1/2) – @IT
http://www.atmarkit.co.jp/ait/articles/0909/14/news103.html

PHP開発者のためのテストのすゝめ(2):PHPUnitでユニットテスト (1/3) – @IT
http://www.atmarkit.co.jp/ait/articles/0911/12/news105.html

PHPUnit3で始めるユニットテスト:特集|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/php-test