Yiiフレームワーク公式ガイドラインシリーズ補完版40-テスト:機能テスト(Functional Testing)

2608 ワード

この章を読む前に、SeleniumドキュメントとPHPUnitドキュメントを読むことを強くお勧めします.次に、Yiiフレームワークで機能テストを記述する基本原則を簡単に概説します.
  • は、ユニットテストと同様に、CWebTestCaseから子を継承するXyzTestクラスとして機能テストが記述する、このうちXyzは、テストされたクラスを表す.PHPUnit_Extensions_SeleniumTestCaseはCWebTestCaseの祖先クラスであるため、私たちはこのクラスからすべての方法を継承することができます.
  • 機能試験類はXyzTestである.phpの形式はPHPファイルに保存する.便宜上、機能テストファイルは通常protected/tests/functional に保存する.
  • 試験クラスは、主にtestAbcと命名する一連の試験方法を含み、Abcは通常、試験する特性の名前である、例えば、ユーザ登録機能を試験するには、testLogin と命名することができる.
  • の試験方法は、Selenium RCとウェブアプリケーションとの間の相互作用を試験する一連のコマンド文を含む.また、我々が望むウェブアプリケーションの返信を確認するための断言文も含む.

  • 機能テストの書き方を説明する前に、yic webappコマンドで自動的に生成されたWebTestCase.phpファイルを見てみましょう.このファイルは、すべての機能テストクラスのベースクラスWebTestCase:として定義されている.
    define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
    
    class WebTestCase extends CWebTestCase
    {
        /**
         * Sets up before each test method runs.
         * This mainly sets the base URL for the test application.
         */
        protected function setUp()
        {
            parent::setUp();
            $this->setBrowserUrl(TEST_BASE_URL);
        }
    
        ......
    }
    WebTestCaseは主にテストページのルートURLを設定し、その後、テスト方法で相対URLsを使用してテストするページを指定することができます.
    なお、テストルートURLでは、index-test.phpではなくindex.phpをエントリスクリプトとして用いる.両者の唯一の違いは前者がtestを用いることである.phpはアプリケーションプロファイルとして、後者はmain.phpを用いる.
    次に、blogプレゼンテーションで文章を表示する機能特性をテストする方法について説明します.まず、上記のように書かれたテストクラスを作成します.テストクラスは、上記のベースクラスWebTestCaseから継承されていることに注意してください.
    class PostTest extends WebTestCase
    {
        public $fixtures=array(
            'posts'=>'Post',
        );
    
        public function testShow()
        {
            $this->open('post/1');
            // verify the sample post title exists
            $this->assertTextPresent($this->posts['sample1']['title']);
            // verify comment form exists
            $this->assertTextPresent('Leave a Comment');
        }
    
        ......
    }

    作成ユニットのテストと同様に、まず、本テストで使用する特定の状態(fixtures)を宣言する.ここではPost fixtureを使用することを指定します.testShowの試験方法では、まずSelenium RCを使用してURL post/1を開く.なお、これは相対的なURLであり、完全なURLはベースクラスのルートURL(i.e.http://localhost/yii/demos/blog/index-test.php/post/1)である.次に、sample1 postのtitle eが現在のページに見つかるかどうかを確認します.また、このページにテキストLeave a Commentが含まれているかどうかを検証することもできる.
    Tip:機能テストを実行する前に、Selenium-CCサーバが起動する.これは、Selenium serverインストールディレクトリの下でコマンドjava -jar selenium-server.jarを実行することによって実現できます.