Yii-テスト
PHPクラスを作成するときは、段階的にデバッグするか、dieまたはechoステートメントを使用してその動作を確認します。Webアプリケーションを開発する場合、ページが期待どおりに機能することを確認するために、フォームにテストデータを入力しています。このテストプロセスは自動化できます。
自動テストアプローチは、長期的なプロジェクトに適しています。
- 複雑で大規模
- 絶えず成長する
- 失敗のコストの点で高すぎる
プロジェクトが複雑にならず、比較的単純な場合、または1回限りのプロジェクトである場合、自動テストはやり過ぎになる可能性があります。
テストの準備
Step 1−Codeceptionフレームワークをインストールします。次のコードを実行します。
composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"
Step 2 −以下を実行します。
composer global status
出力は「現在のディレクトリを<ディレクトリ>に変更しました」です。'<directory> / vendor / bin'をPATH変数に追加する必要があります。この場合、次のコードを実行します-
export PATH = $PATH:~/.composer/vendor/bin
Step 3 −という新しいデータベースを作成します 'yii2_basic_tests'。
Step 4 −テストディレクトリ内で実行します。
codeception/bin/yii migrate
データベース構成は次の場所にあります。 tests/codeception/config/config.php。
Step 5 −を介してテストスイートを構築します。
codecept build
備品
フィクスチャの主な目的は、テストが期待どおりに実行されるように、環境を不明な状態に設定することです。Yiiはフィクスチャに近いフレームワークを提供します。Yiiフィクスチャフレームワークの重要な概念はフィクスチャオブジェクトです。これは、テスト環境の特定の側面を表しています。フィクスチャオブジェクトは、yii\test\Fixture class。
フィクスチャを定義するには、新しいクラスを作成し、yii \ test \ Fixtureまたはyii \ test \ ActiveFixtureから拡張する必要があります。前者は汎用フィクスチャに適していますが、後者はデータベースとActiveRecordで動作するように特別に設計されています。
ユニットテスト
単体テストは、個々の機能をテストするのに役立ちます。たとえば、モデル関数やコンポーネントクラス。
Step 1 −というファイルに新しいフィクスチャを作成します ExampleFixture.php 下 tests/codeception/fixtures ディレクトリ。
<?php
namespace app\tests\codeception\fixtures;
use yii\test\ActiveFixture;
class ExampleFixture extends ActiveFixture {
public $modelClass = ‘app⊨’MyUser';
}
?>
Step 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データベースに関するモデル。
Step 3 −開始するには tests、testsフォルダーに移動して実行します。
codecept run unit models/ExampleTest
すべてのテストに合格する必要があります。次のように表示されます-
機能テスト
機能テストは-であなたを助けます
- ブラウザエミュレータを使用してアプリケーションをテストする
- 関数が正しく機能することを確認します
- データベースと対話する
- サーバーサイドスクリプトにデータを送信する
テストフォルダ内で実行-
generate:cept functional AboutPageCept
上記のコマンドは、 AboutPageCept.phptests / codeception / functionalフォルダーの下にあるファイル。この機能テストでは、about ページが存在します。
Step 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」は表示されないはずです。
Step 2 −経由でテストを実行します。
run functional AboutPageCept
次の出力が表示されます-