Yii-testing

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

Yii-テスト

PHPクラスを作成するときは、ステップごとにデバッグするか、dieまたはechoステートメントを使用して動作を確認します。 Webアプリケーションを開発する場合、フォームにテストデータを入力して、ページが期待どおりに機能することを確認します。 このテストプロセスは自動化できます。

自動テストアプローチは、長期プロジェクトに適しています。

  • 複雑で大きい
  • 絶えず成長する
  • 失敗のコストの点で高すぎる

プロジェクトが複雑にならず、比較的単純であるか、1回限りのプロジェクトである場合、自動化されたテストはやり過ぎになる可能性があります。

テストの準備

  • ステップ1 *-Codeceptionフレームワークをインストールします。 次のコードを実行します。
composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"
  • ステップ2 *-次を実行します。
composer global status

出力は、「現在のディレクトリを<ディレクトリ>に変更」です。 PATH変数に「<ディレクトリ>/vendor/bin」を追加する必要があります。 この場合、次のコードを実行します-

export PATH = $PATH:~/.composer/vendor/bin

ステップ3 *- *'yii2_basic_tests' という新しいデータベースを作成します。

  • ステップ4 *-テストディレクトリ内で実行します。
codeception/bin/yii migrate

データベース構成は tests/codeception/config/config.php にあります。

  • ステップ5 *-テストスイートをビルドします。
codecept build

備品

フィクスチャの主な目的は、予期しない方法でテストが実行されるように、未知の状態で環境をセットアップすることです。 Yiiは、ニアフィクスチャフレームワークを提供します。 Yiiフィクスチャフレームワークの重要な概念はフィクスチャオブジェクトです。 テスト環境の特定の側面を表します。 フィクスチャオブジェクトは、* yii \ test \ Fixtureクラス*のインスタンスです。

フィクスチャを定義するには、新しいクラスを作成し、yii \ test \ Fixtureまたはyii \ test \ ActiveFixtureから拡張する必要があります。 前者は汎用フィクスチャに適していますが、後者はデータベースとActiveRecordで動作するように特別に設計されています。

単体テスト

単体テストは、個々の機能のテストに役立ちます。 たとえば、モデル関数またはコンポーネントクラス。

ステップ1 *- *tests/codeception/fixtures ディレクトリの下の ExampleFixture.php というファイルに新しいフィクスチャを作成します。

<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = ‘app⊨’MyUser';
   }
?>
  • ステップ2 *-次に、tests/codeception/unit/modelsフォルダーにExampleTest.phpという新しいテストファイルを作成します。
<?php
   namespace tests\codeception\unit\models;
   use app\models\MyUser;
   use yii\codeception\TestCase;
   class ExampleTest extends TestCase {
      public function testCreateMyUser() {
         $m = new MyUser();
         $m->name = "myuser";
         $m->email = "[email protected]";
         $this->assertTrue($m->save());
      }
      public function testUpdateMyUser() {
         $m = new MyUser();
         $m->name = "myuser2";
         $m->email = "[email protected]";
         $this->assertTrue($m->save());
         $this->assertEquals("myuser2", $m->name);
      }
      public function testDeleteMyUser() {
         $m = MyUser::findOne(['name' => 'myuser2']);
         $this->assertNotNull($m);
         MyUser::deleteAll(['name' => $m->name]);
         $m = MyUser::findOne(['name' => 'myuser2']);
         $this->assertNull($m);
      }
   }
?>

上記のコードでは、3つのテストを定義します-

  • testCreateMyUser、
  • testUpdateMyUser、および *testDeleteMyUser。

新しいユーザーを作成し、名前を更新して、削除しようとしました。* MyUser *モデルは、実際のDBの完全なコピーであるyii2_basic_testsデータベースの観点から管理します。

ステップ3 *- *tests を開始するには、testsフォルダーに移動して実行します。

codecept run unit models/ExampleTest

すべてのテストに合格する必要があります。 次が表示されます-

ユニットテスト

機能テスト

機能テストはあなたを助ける-

  • ブラウザエミュレータを使用してアプリケーションをテストする
  • 関数が適切に動作することを確認します
  • データベースと対話する
  • サーバー側のスクリプトにデータを送信する

テストフォルダ内で実行-

generate:cept functional AboutPageCept

上記のコマンドは、tests/codeception/functionalフォルダーの下に AboutPageCept.php ファイルを作成します。 この機能テストでは、 about ページが存在するかどうかを確認します。

ステップ1 *- *AboutPageCept.php ファイルを変更します。

<?php
   $I = new FunctionalTester($scenario);
   $I->wantTo('perform actions and see result');
   $I->amOnPage('site/about');
   $I->see('about');
   $I->dontSee('apple');
?>

上記のコードでは、aboutページにいるかどうかを確認しました。 明らかに、ページには「about」という単語が表示され、「apple」は表示されません。

  • ステップ2 *-テストを実行します。
run functional AboutPageCept

次の出力が表示されます-

ユニットテストの実行