3分でできる俺PHPテスト環境

※この記事はVOYAGE GROUP エンジニアブログ : Advent Calendar 2012の15日目の記事として書いてます。

3種の神器 PHPUnit, Stagehand_TestRunner, Phake

初めての方はじめまして。いつもの方こんにちは。
VOYAGE GROUP の adingo という会社で 広告配信に関わる Webアプリケーション開発エンジニアをしている @brtriver です。

今日は実際の現場でも使っているPHPの開発環境構築Tipsということで みんな大好き PHPUnit 、 自分は大好き Phake 、毎回テストを手動で実行するのが許されるのは小学生までだよねー Stagehand_TestRunner の 3つを3分でプロジェクトごとにインストールする方法を書いてみます。

何も考えず composer.jsonをコピペで用意

プロジェクトのルートディレクトリを prj としましょう。
そこに 以下の内容の composer.json ファイルを用意します。

{
  "require": {
    "phake/phake": "v1.0.3",
    "piece/stagehand-testrunner": "v3.5.0"
  },
  "require-dev": {
      "phpunit/phpunit": "3.7.*"
  }
}

そうです。composerを使ってライブラリをプロジェクト内にインストールします。

composer.phar を用意する

あとは、以下のコマンドを黙って叩いて最新のcomposer.pharをダウンロードしてくる

$ curl -s https://getcomposer.org/installer | php

もし、curlがなければ以下でもOk

$ php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

れっつ インストール

さぁ composerを使ってインストールしましょう

$ php composer.phar install --dev

composerのインストールはパッケージの確認などに時間が結構かかります。
お茶でもすすってお待ちください。

これで、vendorディレクトリが作成されコードが配置されます。

PHPUnit を実行してみる

testsディレクトリを作成してテストコードを書いてみましょう。

  • tests/SampleTest.php
<?php
Class SampleTest extends PHPUnit_Framework_TestCase
{
    /**
     * @test
     */
    public function テストが実行できること()
    {
        $this->assertTrue(true);
    }
}

これを phpunitで動かしてみます

$ ./vendor/bin/phpunit --tap tests
TAP version 13
ok 1 - SampleTest::テストが実行できること
1..1

簡単ですね。ちなみに説明は端折ってますがphakeも使えます。

Stagehand_TestRunner を使ってみる

最後にStagehand_TestRunner の用意です。
何も考えずに以下のおまじないコマンドを叩けば準備Ok

$ ./vendor/bin/testrunner compile -p vendor/autoload.php

あとは、testrunnerを起動しておきます。

$ ./vendor/bin/testrunner phpunit -p vendor/autoload.php -a tests
PHPUnit 3.7.10 by Sebastian Bergmann.

.

Sample

 [x] テストが実行できること

Time: 0 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)

この状態でSampleTest.phpのテストを assetTrue(false) に書き換えてみましょう。
すると次のようにファイルの更新をキャッチし自動的にテストが実行されます。

PHPUnit 3.7.10 by Sebastian Bergmann.

F

Sample
 [ ] テストが実行できること

Time: 0 seconds, Memory: 5.50Mb

There was 1 failure:

1) SampleTest::テストが実行できること
Failed asserting that false is true.

/tmp/prj/tests/SampleTest.php:9
/tmp/prj/vendor/piece/stagehand-testrunner/src/Stagehand/TestRunner/Runner/PHPUnitRunner.php:81
/tmp/prj/vendor/piece/stagehand-testrunner/src/Stagehand/TestRunner/Process/TestRun.php:103
/tmp/prj/vendor/piece/stagehand-testrunner/src/Stagehand/TestRunner/CLI/TestRunner.php:69
/tmp/prj/vendor/piece/stagehand-testrunner/src/Stagehand/TestRunner/CLI/TestRunnerApplication/Command/PluginCommand.php:145
/tmp/prj/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:238
/tmp/prj/vendor/symfony/console/Symfony/Component/Console/Application.php:192
/tmp/prj/vendor/symfony/console/Symfony/Component/Console/Application.php:105

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

なんと素敵なことでしょう!

まとめ

たった3分で、PHPで継続的にテストを書いて開発する俺環境ができてしまいました。
簡単というところがミソで、実プロジェクトでも 今回の環境+α を make install で自動構築できるようにしています。

明日の Advent Calendar は いつも笑顔が素敵な @bash0C7 です。お楽しみに!