Zend-framework-unit-testing

提供:Dev Guides
移動先:案内検索

Zend Framework-ユニットテスト

一般に、高度なデバッガツール*を使用するか、 *echodie などの単純なコマンドを使用して、PHPアプリケーションをデバッグできます。 Webシナリオでは、プレゼンテーション層だけでなくビジネスロジックもテストする必要があります。 Webアプリケーションのフォームは、関連するテストデータを入力して、フォームが期待どおりに機能することを確認することでテストできます。

Webサイトのデザインは、ブラウザーを使用して手動でテストできます。 これらのタイプのテストプロセスは、単体テストを使用して自動化できます。 大規模プロジェクトでは、単体テストが不可欠です。 これらの単体テストは、テストプロセスを自動化し、何か問題が発生したときに開発者に警告するのに役立ちます。

PHPUnitのセットアップ

Zendフレームワークは、PHPUnitユニットテストフレームワークと統合されます。 Zendフレームワークの単体テストを作成するには、次のComposerコマンドを使用して簡単に実行できるPHPUnitをセットアップする必要があります。

$ composer require --dev phpunit/phpunit

上記のコマンドを実行すると、次のコードブロックに示すように応答が返されます。

Using version ^5.7 for phpunit/phpunit
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files

さて、「composer.json」ファイルを開くと、次の変更が表示されます-

"require-dev": {
   "phpunit/phpunit": "^5.7"
}

テストケースとアサーション

Zendフレームワークは、コントローラーを単体テストするためのヘルパークラスを提供します。 TestCase は、テストケースを記述する PHPUnit フレームワークの主要コンポーネントであり、Zend Frameworkは AbstractHttpControllerTestCase として呼び出されるTestCaseの抽象的な実装を提供します。

このAbstractHttpControllerTestCaseはさまざまな Assert メソッドを提供し、機能ごとにグループ化できます。 彼らは次のとおりです-

  • リクエストアサーション-HTTPリクエストをアサートするために使用されます。 たとえば、assertControllerName。
  • CSS Select Assertions -HTML DOMモデルを使用して応答HTMLを確認するために使用されます。
  • * XPathアサーション*-CSSの代替は、XPathに基づいてアサーションを選択します。
  • リダイレクトアサーション-ページのリダイレクトを確認するために使用されます。
  • 応答ヘッダーアサーション-ステータスコード(assertResponseStatusCode)などの応答ヘッダーの確認に使用

テストディレクトリを作成する

ユニットテストは、モジュールごとに個別に作成できます。 すべてのテスト関連のコーディングは、モジュールのルートディレクトリの下にある test フォルダー内に作成する必要があります。

たとえば、Tutorialモジュールで使用可能なTutorialControllerのテストを作成するには、テストクラスをmyapp/module/Tutorial/test/Controller/ディレクトリに配置する必要があります。

*TutorialController* を単体テストするためのテストクラスを作成しましょう。

まず、TutorialControllerTestというクラスを作成し、AbstractHttpControllerTestCaseに拡張する必要があります。

次のステップは、テスト環境をセットアップする Setup メソッドを記述することです。 これは、 setApplicationConfig メソッドを呼び出して、メインアプリケーション構成ファイルmyapp/config/application.config.phpを渡すことで実行できます。

public function setUp() {
   $configOverrides = [];
   $this->setApplicationConfig(ArrayUtils::merge(
      include __DIR__ . '/../../../../config/application.config.php',
         $configOverrides
   ));
   parent::setUp();
}

1つ以上のメソッドを記述し、要件に応じてさまざまなアサートメソッドを呼び出します。

 $this->assertMatchedRouteName('tutorial');

私たちはテストクラスを書いており、完全なリストは次のとおりです-

<?php
namespace TutorialTest\Controller;
use Tutorial\Controller\TutorialController;
use Zend\Stdlib\ArrayUtils;
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;

class TutorialControllerTest extends AbstractHttpControllerTestCase {
   public function setUp() {
      $configOverrides = [];
      $this->setApplicationConfig(ArrayUtils::merge(
         include __DIR__ . '/../../../../config/application.config.php',
            $configOverrides
      ));
      parent::setUp();
   }
   public function testIndexActionCanBeAccessed() {
      $this->dispatch('/tutorial', 'GET');
      $this->assertResponseStatusCode(200);
      $this->assertModuleName('tutorial');
      $this->assertControllerName(TutorialController::class);
      $this->assertControllerClass('TutorialController');
      $this->assertMatchedRouteName('tutorial');
   }
}

ここで、コマンドプロンプトを開き、アプリケーションのルートディレクトリに移動して、 vendor フォルダー内にある phpunit 実行可能ファイルを実行します。

cd/path/to/app
./vendor/bin/phpunit ./vendor/bin/phpunit module/
   Tutorial/test/Controller/TutorialControllerTest.php

結果は、次のコードブロックに示すようになります-

PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
.1/1 (100%)
Time: 96 ms, Memory: 8.00MB
OK (1 test, 5 assertions)