HudsonでPHPのユニットテスト
Hudsonを使い始めたときから、いつかPHPの開発でも使いたいなぁとか思いつつ、Phing Pluginをコミットしてずっと忘れていました。
PHPの試験環境はJavaの影響を受けてかなり良くなってきています。Antに対応するPhing、Junitに対応するPHPUnit、CheckStyleに対応するPHP_CodeSnifferなどがあります。
今日は、手始めにPhingとPHPUnitで単体試験の自動化をやってみたいと思います。
Phingの準備
Phingのインストール
Phingをインストールするを参考にしてインストールします。Hudsonを実行するユーザーで動くことを確認しておきます。
ソースの準備
今回は簡単に以下のソース(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にフリースタイルでプロジェクトを作成して設定すれば自動化できます。