somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Zendframework】Guestbook関連モデルのテスト

モデルのテストを作成していきます。

モデル用テストディレクトリの作成

コントローラー用テストディレクトリしかありませんので、以下のディレクトリを作成します。

  • tests\application\models
  • tests\application\models\DbTable

モデル用テストコードの作成

PHPUnitのスケルトン機能を使用し、既に作成されているモデルからテストコードの雛形を作成します。

このときbootstrapファイルを指定しています。これにより、Zendframeworkのオートロードが有効になるため、既に作成されているモデルを読み込めるようになります。

cd tests
phpunit --bootstrap bootstrap.php --skeleton-test Application_Model_DbTable_Guestbook Application_Model_DbTable_Guestbookモデルファイルのパス

Wrote skeleton for "Application_Model_DbTable_GuestbookTest" to "Application_Model_DbTable_Guestbookモデルファイルのディレクトリ\Application_Model_DbTable_GuestbookTest.php".
<?php

require_once 'Application_Model_DbTable_Guestbookモデルファイルのパス';

/**
 * Test class for Application_Model_DbTable_Guestbook.
 * Generated by PHPUnit on YYYY-MM-DD at HH:II:SS.
 */
class Application_Model_DbTable_GuestbookTest extends PHPUnit_Framework_TestCase
{
    /**
     * @var Application_Model_DbTable_Guestbook
     */
    protected $object;

    /**
     * Sets up the fixture, for example, opens a network connection.
     * This method is called before a test is executed.
     */
    protected function setUp()
    {
        $this->object = new Application_Model_DbTable_Guestbook;
    }

    /**
     * Tears down the fixture, for example, closes a network connection.
     * This method is called after a test is executed.
     */
    protected function tearDown()
    {
    }
}
?>

Application_Model_DbTable_Guestbookモデルファイルのディレクトリに、Application_Model_DbTable_GuestbookTest.phpファイルが上記内容で作成されます。

このファイルを修正していきます。修正点は以下のとおりです。

  • ファイルをtests\application\models\DbTableに移動する
  • ファイル名をGuestbookTest.phpに変更する
  • require_onceを消す(オートロードによって読み込まれるため)
  • $object変数の名前をわかりやすいように、guestbookに変更する
  • phpの閉じタグを削除する
  • テスト用のメソッドを追加する
    public function testFail() {
        $this->fail("fail");
    }
    

テスト実行結果は以下のとおりです。

C:\zend\tests>phpunit -c phpunit.xml
PHPUnit 3.5.15 by Sebastian Bergmann.

FF..F

Time: 2 seconds, Memory: 14.25Mb

There were 3 failures:

1)
2)

3) Application_Model_DbTable_GuestbookTest::testFail
fail

C:\zend\tests\application\models\DbTab
le\GuestbookTest.php:34

FAILURES!
Tests: 5, Assertions: 14, Failures: 3.

無事、テスト対象になりました。

DbTableクラスと同様に、ドメインモデルとデータマッパーもテストを作成できます。この2つにはメソッドがありますので、そのメソッドのテストメソッドが作られています。

.zfproject.xmlの修正

サンプルが無いのでどうしようもありませんでした。ディレクトリ名やファイル名は、既存の書き方にあわせればよいですが、テスト対象メソッドの書き方が見当つきません。

.zfproject.xml自体に修正方法のマニュアルがないので、追加したモデルの削除を行ったときも手動で直さなければならない状況です。

テストモデルとは直接関係ないですが、このURLにzf2でZend_toolが改善されるかもしれない発言があります。(Zend Framework - Keeping .zfproject.xml up to date with Zend_Tool)