Hatena::ブログ(Diary)

ssogabeの日記 RSSフィード

2008-11-02

HudsonでPHPのユニットテスト

Hudsonを使い始めたときから、いつかPHPの開発でも使いたいなぁとか思いつつ、Phing Pluginコミットしてずっと忘れていました。

PHP試験環境Javaの影響を受けてかなり良くなってきています。Antに対応するPhingJunitに対応するPHPUnitCheckStyleに対応するPHP_CodeSnifferなどがあります。

今日は、手始めにPhingとPHPUnitで単体試験自動化をやってみたいと思います。

Phingの準備

Phingのインストール

Phingをインストールするを参考にしてインストールします。Hudsonを実行するユーザーで動くことを確認しておきます。

Phingプラグインインストール

[Hudsonの管理] - [プラグインの管理] - [利用可能]の一覧表示から"Phing Plugin"をチェックして、インストール再起動します。


f:id:ssogabe:20081103001925p:image

ソースの準備

今回は簡単に以下のソース(StringUtil.php)を試験対象にします。

<?php
class StringUtil {

    private function __construct() {
        //
    }

    public static function toupper($str) {
        return mb_strtoupper($str, 'UTF-8');
    }
}

テストコードの準備

phpunit --skeleton StringUtilStringUtilTest.phpを作って、テストメソッドを追加します。

    /**
     * 成功するテスト
     */
    public function testToupper1() {
        $this->assertEquals("AAA", StringUtil::toupper("aaa"));
    }

    /**
     * 失敗するテスト
     */
    public function testToupper2() {
        $this->assertEquals("AAa", StringUtil::toupper("aaa"));
    }

    /**
     * 成功するテスト
     */
    public function testToupper3() {
        $this->assertEquals("あああ", StringUtil::toupper("あああ"));
    }

build.xmlの作成

Phingで試験を行うには、JUnitと同様にbuild.xmlが必要です。ここでは簡単にPHPUnitを実行してテスト結果をXMLファイルに出力するようにします。このXMLファイルJUnitが出力するXMLに準拠しているようなので、HudsonでもJUnitと同様に結果を確認できそうです。

<?xml version="1.0" encoding="utf-8" ?>
<project name="StringUtil" basedir="." default="test">
  <target name="test">
    <delete dir="reports" includeemptydirs="true" />
    <mkdir dir="reports" />
    <phpunit
      haltonfailure="false"
      printsummary="true"
      >
      <formatter todir="reports" type="xml" outfile="unitreport.xml" />
      <batchtest>
        <fileset dir="src">
          <include name="**/*Test.php" />
        </fileset>
      </batchtest>
    </phpunit>
  </target>
</project>

ここまでできると、Javaと同様にHudsonフリースタイルプロジェクトを作成して設定すれば自動化できます。

Phingの設定

ビルドの手順の追加からPhingの呼び出しを選択して、以下のように設定します。(ワークスペースphpディレクトリbuild.xmlがあります)


f:id:ssogabe:20081103004507p:image

テスト結果の集計の設定

ビルド後の処理Junitテスト結果の集計を設定します。


f:id:ssogabe:20081103004508p:image



以上で準備ができたのでビルドを実行すると、グラフテスト結果を見ることができます。


f:id:ssogabe:20081103005641p:image


f:id:ssogabe:20081103005640p:image


f:id:ssogabe:20081103005639p:image


f:id:ssogabe:20081103005638p:image



xdebugを使えばコードカバレッジもとれて、出力もCloverと互換性があるようなので、十分使えるのではないでしょうか。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。