MacにPHPUnit(3.7)を入れて試してみた

こんにちは。この前、コーヒーを飲むベストなタイミングを先輩に話したらウザがられたきたけーです。

今日は故あってPHPUnitを試しにMacにいれていました。PHPUnitは機能が豊富だったり、設定ファイルをXMLで書くのが面倒な印象が...。小さいところから始めたいので最小限の導入と使い方を紹介します。
そもそも僕はMacにphpが入っていなかったので、そこから。homebrewでphpを入れます。

導入手順

brew install php53 # なんで5.3なの?とかはツッコまないでください
chmod -R ug+w /usr/local/Cellar/php53/5.3.27/lib/php
pear config-set php_ini /usr/local/etc/php/5.3/php.ini
brew install php53-xdebug
pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony.com
pear install pear.phpunit.de/PHPUnit

とりあえずつかってみる

/usr/local/Cellar/php53/5.3.27/binphpunitが設置されているので、適当に/usr/local/Cellar/php53/5.3.27/binをPATHに追加しておくとよいでしょう。

ありがちな簡単なサンプルを作成します。

<?php
require_once 'PHPUnit/Framework/TestCase.php';

class ArrayTest extends PHPUnit_Framework_TestCase
{
    public function testNewArrayIsEmpty()
    {
        // 配列を作成します。
        $fixture = array();

        // 配列のサイズは 0 です。
        $this->assertEquals(0, sizeof($fixture));
    }

    /**
     * メソッド名がtestで始まっていないが,「@test」
     * アノテーションを使用していることに注意
     *
     * @test
     */
    public function arrayContainsAnElementTest()
    {
        // 配列を作成します。
        $fixture = array();

        // 配列にひとつの要素を追加します。
        $fixture[] = 'Element';

        // 配列のサイズは 1 です。
        $this->assertEquals(1, sizeof($fixture));
    }
}

このファイルをArrayTest.phpという名前で保存しましょう。テストを実行する場合は以下のコマンドを実行します。

phpunit --colors ArrayTest.php

複数のテストファイルを対象にテストを実行したいときはどうすんの?

ドキュメントに色々な方法が書かれていますが、適当なディレクトリに設置して、そのディレクトリを対象にテストを実行するのがお手軽でしょう。
testというディレクトリを作成して、ディレクトリにHogeTest.phpFooTest.phpといったテストファイルを設置します(testの中にディレクトリがある場合は再帰的にテストファイルを探します)。この場合は以下のようにコマンドを実行します。

phpunit --colors test

注意!
単純に複数のファイルを引数に指定してもひとつのファイルしか実行されません。例えば、下のコマンドはダメです。

phpunit --colors *Test.php

「次はなんだ?」

スタブとかモックの機能もあるみたいなので次回はこれを紹介します。