konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


Old/Zend Studio/6

PHPUnitテスト

PHPクラスの作成で作成したクラス businessPartner に対してテストメソッドを1つ実装し、実行した例を紹介します。
PHPクラスの作成 と同様に Zend Studio for Eclipse 6.1 日本語版を使用して説明します。

環境の準備

PHPUnit のライブラリを include_pathに設定する必要があります。

  1. PHPエクスプローラービュー上のPHPプロジェクトを右クリックし、表示されたメニューからincludeパスライブラリの設定を選びます。
  2. プロパティーダイアログが表示されます。
    3種類表示されるタブのうち、ライブラリタブを選びます。
    ライブラリタブの右側部分にある、変数追加ボタンを押します。
  3. PHPUNIT_HOME を選択してOkボタンを押します。
    PHPUNIT_HOME は Zend Studioに同梱されたPHPUnitライブラリの場所を示す変数です。
  4. さらに、最初に表示されていたダイアログの右下のOKボタンを押します。
  5. プロジェクトのビルドが行われます。
    ビルドが終了するとPHPエクスプローラー上のInclude Paths 配下に PHPUNIT_HOMEがぶら下がって表示されます。
    この状態になると、PHPUnitライブラリが利用できます。

テストメソッドの実装

Unitテスト用の骨格を生成後、メソッドを1つ実装するまでの手順を説明します。

  1. 初めに、businessPartner クラス上で右クリックします。
    表示されるメニューから新規を選び、次いでPHPUnitテストケースを選びます。
  2. 新規PHPUnitテストケースダイアログが表示されます。
    そのダイアログ上の「テストする要素」入力欄にクラス名の businessPartner が表示されることを確認します。
    このクラス名の末尾に「Test」を追加した文字列 businessPartnerTest が「テストクラス名」として表示されることを確認して、完了ボタンを押します。
  3. businessPartnerTest のコードが自動生成されます。
    businessPartner の各メソッドごとにテスト用メソッドが生成され、各メソッド名の先頭には test がつきます。
    例えば set_address メソッドに対して testSet_address メソッドが生成されます。
    ただし、この状態ではまだ骨格だけです。
    実際にテストすべき内容を TODO タグの箇所に記述する必要があります。
  4. これらのテスト用メソッドのうち、試しに testSet_address メソッドを実装します。
    一例として、 set_address メソッドで設定した住所を、 get_address メソッドで取得できるかテストしましょう。
    public function testSet_address() {
        //TODO Auto-generated businessPartnerTest->testSet_address()
        //$this->markTestIncomplete('set_address test not implemented');
        $this->businessPartner->set_address('東京都渋谷区');
        $this->assertEquals('東京都渋谷区',
                            $this->businessPartner->get_address(),
                            'address is different from which you specified');
    }
  5. この例で使用した assertEquals メソッドは 第1引数と第2引数が等しい (equal)かどうかチェックします。
    等しければ true、等しくなければ false を返して第3引数のメッセージをPHPUnit ビューに表示します。
    この例では、get_address メソッドの返り値が、 set_address メソッドの引数に渡した「東京都渋谷区」と同じかどうかテストします。
    makeTestIncomplete メソッドは不要になるのでコメントアウトします。
    このメソッドは、まだテストを実装していないことを明示するためのメソッドです。
    他にも数々のメソッドが用意されています。

実行の構成及び結果確認

正しく set_address 及び get_address メソッドが実装されたかテストして確認します。

  1. メニューから実行を選び、さらに表示されたメニューから実行構成を選びます。
  2. 実行構成ダイアログが表示されます。
    PHP Web ページ、PHPUnit、PHPスクリプトの3つの選択肢のうち、PHPUnitを選んで右クリックし、表示されたメニューから新規を選びます。
  3. 実行構成の詳細画面が表示されます。
    今回は、変更すべき箇所が特に無いので、そのまま適用ボタンを押し、実行ボタンを押して開始します。
    XML形式のレポートが全く不要であれば、XMLレポートの生成のチェックを外しても構いません。
  4. PHPUnitビューが表示されます。
    テストが成功すると、PHPUnitビューの右上の帯が緑色で表示されます。
    ほとんどのテスト用メソッドでは makeTestIncomplete メソッドの引数に指定されたメッセージが表示されます。
    しかし、testSet_address メソッドでは何もメッセージが表示されないはずです。
    テストが失敗した場合は、PHPUnitビューの右上の帯が緑色の代わりに茶色で表示され、
    左下の testSet_addressメソッドに×印がつきます。
    さらに、assertEquals の第3引数で指定したメッセージが表示されます。
  5. PHPUnitビューの右側の部分にコードカバレッジが表示されます。
    PHPUnitテストでコードをどれだけカバーできたか確認できます。
  6. コードカバレッジのカバー行の調査済、有効行、合計の項目が、それぞれ、テストでカバーできた行数、テストでカバーすべき行数、全行数を意味します。
    たとえば、それぞれ 2, 10, 108 と表示された場合、businessPartner 全体の 108行のうち、カバーすべき行数は 10行で、そのうち2行をカバーできたことになります。
  7. コードカバレッジで太くて青く表示されている数字をクリックすると、 businessPartner のコードが色分けして表示されます。
    テストを実行した行の背景は薄い青紫色で、まだ実行していない行では薄いピンク色で表示されます。
    get_addressメソッド及び set_addressメソッドをカバーできたことが分かります。
    全てのテストメソッドを実装し終わってから、実行すると下記のようになるでしょう。
    1)コードカバレッジにて、有効行と調査済の行数が等しくなる。
    2)businessPartner のコードの色分けで、背景が薄いピンク色の行が無い。

XMLデータでの出力

実行結果をXML形式で出力することもできます。
レポートの出力先は、実行構成ダイアログで環境タブを選ぶと確認できます。
ZEND_PHPUNIT_LOG_XML に指定されたパスが出力先です。

下はXMLレポートの例です。 見やすくするために改行を適宜追加しています。 Zend Studio 上での所要時間 (time) や、メッセージ、テスト失敗箇所数 (failures) などが出力されます。XXXXXとした箇所はWindowsのユーザー名が記述されている箇所です。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
 <testsuite name="businessPartnerTest" tests="10"
            file="C:\Documents and Settings\XXXXX\Zend\workspaces\DefaultWorkspace\unittest\businessPartnerTest.php"
            line="10" failures="0" errors="0" time="0.22416400909423">
   <testcase class="businessPartnerTest" name="testGet_address"
             file="C:\Documents and Settings\XXXXX\Zend\workspaces\DefaultWorkspace\unittest\businessPartnerTest.php"
             line="45" time="0.021947145462036">
     <error type="PHPUnit_Framework_IncompleteTestError"
            file="C:\Program Files\Zend\Zend Studio for Eclipse - 6.1.2\plugins\com.zend.php.phpunit_6.1.2.v20090318-1524
            \resources\library\PHPUnit\Framework\Assert.php"
            line="2046">
       <message><![CDATA[get_address test not implemented]]></message>
       <traceframes>
         <traceframe file="C:\Documents and Settings\XXXXX\Zend\workspaces\DefaultWorkspace\unittest\businessPartnerTest.php"
                     line="46" call="PHPUnit_Framework_Assert::markTestIncomplete()"/>
       </traceframes>
     </error>
   </testcase>

最終更新のRSS