ZendFramework-ユニットテスト

一般に、PHPアプリケーションをデバッグするには advanced debugger tool またはのような簡単なコマンドを使用して echo そして die。Webシナリオでは、ビジネスロジックとプレゼンテーション層をテストする必要があります。Webアプリケーションのフォームは、関連するテストデータを入力してテストし、フォームが期待どおりに機能していることを確認できます。

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

PHPUnitのセットアップ

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

$ 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" 
}

TestCaseとアサーション

Zendフレームワークは、コントローラーを単体テストするためのヘルパークラスを提供します。ザ・TestCase の主成分です PHPUnit テストケースを作成するためのフレームワークとZendFrameworkは、TestCaseの抽象的な実装を提供します。 AbstractHttpControllerTestCase

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

  • Request Assertions−http要求をアサートするために使用されます。たとえば、assertControllerNameです。

  • CSS Select Assertions − HTMLDOMモデルを使用して応答HTMLをチェックするために使用されます。

  • XPath Assertions −XPathに基づくCSSselectアサーションの代替。

  • Redirect Assertions −ページのリダイレクトを確認するために使用されます。

  • Response Header Assertions −ステータスコード(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'); 
   } 
}

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

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)