SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

MVCフレームワークで単体テストを実施する - Zend_Test -

Zend Frameworkによる実践的なPHPアプリケーション開発 34

  • X ポスト
  • このエントリーをはてなブックマークに追加

Zend_Testを利用するための準備

 Zend_Testコンポーネントを利用するためには外部ライブラリであるPHPUnitをインストールする必要があります。最初に、PHPUnitをインストールする手順について説明します。

 次に、MVC環境を構築した上で、テストを記述するための準備を行う手順についても説明します。なお、MVC環境の構築の方法については以前の記事『コマンドラインからのPHPアプリケーション管理 - Zend_Tool - 』(CodeZine)も参照ください。

PHPUnitの準備

 ではさっそくPHPUnitをインストールしましょう。PHPUnitはPEARを利用してインストールします。

リスト1 PHPUnitのインストール
>pear channel-discover pear.phpunit.de
...
>pear channel-discover components.ez.no
...
>pear channel-discover pear.symfony-project.com
...
>pear install phpunit/PHPUnit
...

 最初の3つのコマンド「channel-discover」は追加するパッケージがある場所を指定しています。最初の行は今回インストールするPHPUnit本体の場所を、他の2行はPHPUnitが依存しているパッケージの場所を指定しています。そして、最後のinstallコマンドでPHPUnitをインストールするように指示しています。

 なお、インストール直後のPHPの場合、PEARのバージョンの関係でいくつかのパッケージのインストールについてエラーが発生することがあります。エラーが発生した場合はコラムを参照してPEARのバージョンを上げてから、再度インストールに挑戦してください。

【コラム】PEARのアップグレード

 PHPUnitをインストールする際にPEARのバージョンの関係でエラーが発生する場合があります。例えばPHP5.3.5付属のgo-pear.batを利用してインストールされたPEARバージョン1.9.0はPHPUnitをインストールすることができません。

 この場合、一部のパッケージのインストールには成功しており、エラーは先頭でのみ表示されているため、注意が必要です:

phpunit/PHPUnit requires PEAR Installer (version >= 1.9.1), installed version is 1.9.0 
phpunit/PHPUnit can optionally use PHP extension "dbus"
...(中略)
downloading Text_Template-1.1.0.tgz ...
Starting to download Text_Template-1.1.0.tgz (2,783 bytes)
....done: 2,783 bytes
...(中略)
install ok: channel://components.ez.no/ConsoleTools-1.6.1

 PEARのバージョンの問題でPHPUnitのインストールに失敗する場合には次のようにPEARのアップグレードをする必要があります。

>pear upgrade

 これで、PHPUnitをインストールできる最新(執筆時点ではバージョン1.9.1)のPEARにアップグレードできます。

MVC環境の準備

 今回テストを記述する対象のシステムは、Zend FrameworkのMVC環境を利用したWebアプリケーションです。まずはzfコマンドでZend FrameworkのMVC環境を構築します。

リスト2 MVC環境の構築
>zf.bat create project codezine

 ▼

Creating project at C:/codezine
Note: This command created a web project, for more information setting up your VHOST, please see docs/README

 この作業でデフォルトのMVC環境のファイル構成が作成されますが、この中にtestsフォルダがあります。このtestsフォルダには、zfコマンドで作成された部品に対応するテストの雛形が自動的に設置されます。例えば、次のようにIndexコントローラを作成したとします。

リスト3 Indexコントローラの作成
>zf.bat create controller Index

 ▼

Creating a controller at C:\codezine/application/controllers/IndexController.php
Creating an index action method in controller Index
Creating a view script for the index action method at C:\codezine/application/views/scripts/index/index.phtml
Creating a controller test file at C:\codezine/tests/application/controllers/IndexControllerTest.php
Updating project profile 'C:\codezine/.zfproject.xml'

 これを実行した後のtestsディレクトリ以下のファイル構成は次のようになります。

リスト4 testsのファイル構成
codezine
│  (他のディレクトリは省略)
└tests
  │  phpunit.xml                     テスト全体の設定
  │
  ├─application                     アプリケーションのテストを格納
  │  │  bootstrap.php               テスト環境の設定
  │  │
  │  └─controllers                 コントーラのテストを格納
  │        │                        (create controller で追加)
  │        │IndexControllerTest.php Indexコントローラのテスト
  │        │                        (create controller で追加)
  │
  └─library                         ライブラリのテストを格納
           bootstrap.php               テスト環境の設定

※「controllers」ディレクトリと「IndexControllerTest.php」ファイルはリスト3で作成

 ここで作成したファイルのうちphpunit.xmlどのようなテストを行うかに関しての設定を、bootstrap.phpテストを行う際のアプリケーション環境の設定を、IndexControllerTest.phpIndexコントローラのためのテストを記述します。

 なお、Zend_Testコンポーネントの出力は、デフォルトではErrorコントローラを利用します。今回はサンプルを単純にするため、環境の構築を担当するブートストラップオブジェクトは作成しないことにします。そのため、次のようにエラーコントローラのコードに修正を行います。

リスト5 出力のための修正(ErrorController.php)
public function getLog()
{
    $bootstrap = $this->getInvokeArg('bootstrap');

    if (!$bootstrap->hasResource('Log')) {
        return false;
    }
    $log = $bootstrap->getResource('Log');
    return $log;
}

 ▼

public function getLog()
{
    $bootstrap = $this->getInvokeArg('bootstrap');

    if ($bootstrap == null) {//このif文を追加
        return false;
    }
    if (!$bootstrap->hasResource('Log')) {
        return false;
    }
    $log = $bootstrap->getResource('Log');
    return $log;
}

 このgetLogメソッドは、MVC環境にログを記録するオブジェクトが登録されている場合に、そのログ記録用のオブジェクトを返します。その際、環境構築を行うブートストラップオブジェクトからログのためのオブジェクトを取得するのですが、今回のテストで利用する環境ではブートストラップオブジェクトを構築しません。元のコードではブートストラップオブジェクトが存在する前提なので、if文を1つ加えてブートストラップオブジェクトがない場合の処理を追加しています。

次のページ
テストの記述と実行

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5786 2011/03/10 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング