2008-11-02
HudsonでPHPのユニットテスト
Hudsonを使い始めたときから、いつかPHPの開発でも使いたいなぁとか思いつつ、Phing Pluginをコミットしてずっと忘れていました。
PHPの試験環境はJavaの影響を受けてかなり良くなってきています。Antに対応するPhing、Junitに対応するPHPUnit、CheckStyleに対応するPHP_CodeSnifferなどがあります。
今日は、手始めにPhingとPHPUnitで単体試験の自動化をやってみたいと思います。
Phingの準備
Phingのインストール
Phingをインストールするを参考にしてインストールします。Hudsonを実行するユーザーで動くことを確認しておきます。
Phingプラグインのインストール
[Hudsonの管理] - [プラグインの管理] - [利用可能]の一覧表示から"Phing Plugin"をチェックして、インストール、再起動します。
ソースの準備
今回は簡単に以下のソース(StringUtil.php)を試験対象にします。
<?php class StringUtil { private function __construct() { // } public static function toupper($str) { return mb_strtoupper($str, 'UTF-8'); } }
テストコードの準備
phpunit --skeleton StringUtilでStringUtilTest.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があります)
テスト結果の集計の設定
以上で準備ができたのでビルドを実行すると、グラフやテスト結果を見ることができます。
xdebugを使えばコードカバレッジもとれて、出力もCloverと互換性があるようなので、十分使えるのではないでしょうか。
- 3 http://d.hatena.ne.jp/keyword/Hudson
- 2 http://d.hatena.ne.jp/kkawa/20081023/p1
- 2 http://k.hatena.ne.jp/keywordblog/hudson
- 1 http://d.hatena.ne.jp/keyword/清水エスパルス
- 1 http://d.hatena.ne.jp/keyword/redMine
- 1 http://r.hatena.ne.jp/ucq/プログラミング/entrymobile?eid=1169525236
- 1 http://reader.livedoor.com/reader/
- 1 http://search.minakoe.jp/rsss/rsss.asp?qry=domain:hatena&multi=1
- 1 http://www.google.co.jp/hws/search?client=dell-row&adsafe=high&safe=high&channel=jp-smb&hl=ja&ibd=&q=java トークン 登録画面 入力ミス
- 1 http://www.google.co.jp/reader/view/?q=天王寺&lr=lang_ja&ie=UTF-8&oe=utf-8&rls=org.mozilla:ja:official&client=firefox-a&um=1&sa=N&tab=ly






