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)