Nullyのぶろぐ

仙台から東京へ転勤したエンジニアのブログ

ユニットテストができるプラグイン wp-unit

昨日、当ブログ管理画面でちょこちょこ遊んでいたら管理画面からユニットテストを実行できるプラグインを発見したので、紹介がてら簡単な使い方のご紹介。

wp-unit

wp-unitはPHPUnitをベースとして作られたユニットテストプラグインです。

PHPUnitについての説明は割愛します。

PHPUnitをインストールする場合、現在利用しているPHPのバージョンに合わせてインストールして下さい。(4.3.0以上であればOKっぽいです)

※予めPHPUnitへパスを通しておく必要があります。

インストール

管理画面ログイン後、「プラグイン」メニューから新規追加を選択します。

検索ワードに「wp-unit」と入力し、検索します。

表示された画面から「wp-unit」を探します。

「インストール」をクリックし、インストールを終えます。

インストール完了後は以下のメニューが追加され、ユニットテストが実行出来る環境が整いました。

ファイル内容

ファイル内容は以下のようになっています。

すでに、サンプルとしてのテストケースが組み込まれています。

自分でテストケースを書く祭は、「testcase」ディレクトリにどんどん追加していきます。

テストケースのルール

テストケースを書く際のルールとして

  • クラス名とファイル名は同一で有ること
  • PHPUnit_Framework_Testcaseクラスを継承すること
  • 実行するテストケースの関数名は「test」から始まっていなければならない

が最低限のルールです。

PHPUnitをいつもどおり使う感じです。

テストケースを書く

PHPUnitを使ったことが有る方ならここまででおおかた理解できたかと思います。

が、一応参考程度のサンプルコードをば。

ファイル名及びクラス名が「NullyTestCase」という名前になっているテストケースを作成してみます。

[CC lang="php"]

class NullyTestCase extends PHPUnit_Framework_Testcase {

public function setUp() {

// このテストケースの初期セットアップ

}

// 現在ログインしているユーザーがNullyかどうかを調べる

public function testNullyCanDoUnko() {

$current_user = get_current_user();

$this->assertTrue($current_user == "nully"); // 結果がtrueか否かをテストする

}

}

[/CC]

これで、現在ログインしているユーザーがnullyというユーザーであれば、テストが成功した状態になります。

テストを実行する

テストを実行するには、管理画面から先程の「Run Unit Tests」にアクセスし、「Run」ボタンを押してあげます。

テストが全て正常に実行されれば以下のような画面が表示されます。

今回実行したテストケースは初期導入されているコードを実行しました。

他にもテストケースを書いている場合は一覧で全ての実行結果が表示されます。

項目を順に説明すると

  • Test Case:実行されたクラスの名前
  • Test:実行されたテスト名(関数名)
  • Status:テストの実行結果(passedかfailedのいずれか)
  • Message:実行したテストで返されたメッセージ

になります。

あとは全てのステータスがpassedになるように頑張ります!

最後に

WordPress上でテストケースかけるかなー?と思っていた矢先に出てきたプラグインだったので思わず即導入してみました。

まだコード自体も公開されたばかりなので、今後のバージョンアップが楽しみです。

でもってPHPUnitを利用したテストなのですごくとっつきやすくてよかったです。

テーマ側へのテストも実行出来るかが今のところ不明ですが、テーマ側のテストも出来るようになっていれば今後テスト環境では導入していくかも知れません。(検証中)出来ました。詳細はこちらから。

テストコードは大事ですよ!

追記

テーマのテストも出来ました。

テーマのテストというよりは、現在のテーマが適用されているHTMLの検証です。

通常通り、テストケースを作成します。

[CC lang="php"]

class MyThemeTest extends PHPUnit_Framework_Testcase

{

protected $blog_home;

public function setUp()

{

$this->blog_home = get_bloginfo("home");

}

public function testBlogHome()

{

$matcher = array(

"tag" => "html",

"child" => array(

"tag" => "body",

"class" => "home"

)

);

$uri = $this->blog_home. "/";

$response = wp_remote_get($uri);

$this->assertTrue($response["response"]["code"] == 200); // レスポンスコードのアサート

$this->assertTag($matcher, $response["body"]); // 表示されたページがhtmlの子としてbody.home要素が存在しているかチェック

}

}

[/CC]

表示されたページをXPathのような物を使って「$matcher」で指定したタグが存在しているかをアサートしています。

もうちょっと作り込めば、特定のニュースを表示するような領域のチェックなども行えます。