ホームページ >PHPフレームワーク >YII >How do I use Yii's testing framework to write unit tests and functional tests?

How do I use Yii's testing framework to write unit tests and functional tests?

Johnathan Smith
Johnathan Smithオリジナル
2025-03-12 17:36:56836ブラウズ

ユニットおよび機能テストのためにYiiのテストフレームワークの使用方法

Phpunitに基づいて構築されたYiiのテストフレームワークは、ユニットテストと機能テストの両方を作成するための堅牢な環境を提供します。それぞれの使用方法を分解しましょう:

ユニットテスト:ユニットテストは、モデルやコントローラーなどの個々のコンポーネントまたはコードユニットに焦点を当てています。 YIIは、Codeceptionのような備品とヘルパーを提供することにより、これを簡素化します。典型的な単体テストでは、モデルの検証ルールまたはコントローラーのアクション出力を検証する場合があります。

ユニットテストを作成するには、通常、 tests/unitディレクトリ内でCodeception\Test\Unit (またはカスタムクラスを拡張するカスタムクラス)を拡張するクラスを作成します。このクラス内では、個々のテストケースを表す@testで注釈が付けられたメソッドを定義します。 YIIは、依存関係をock笑し、アプリケーションコンポーネントにアクセスするための役立つツールを提供します。

たとえば、一意のユーザー名を必要とする検証ルールを備えたUserモデルがあるとしましょう。ユニットテストは次のようになる場合があります:

 <code class="php"><?php namespace tests\unit\models; use app\models\User; use Codeception\Test\Unit; class UserTest extends Unit { /** * @test */ public function validateUniqueUsername() { $user1 = new User([&#39;username&#39; => 'testuser', 'email' => 'test@example.com', 'password' => 'password']); $this->assertTrue($user1->save()); $user2 = new User(['username' => 'testuser', 'email' => 'test2@example.com', 'password' => 'password']); $this->assertFalse($user2->save()); $this->assertArrayHasKey('username', $user2->getErrors()); } }</code>

このテストはユーザーを作成し、同じユーザー名で別のユーザーを作成しようとし、検証が予想どおりに失敗することを確認します。

機能テスト:機能テストは、アプリケーションのさまざまな部分間の相互作用を調べ、多くの場合ユーザーアクションをシミュレートします。データとユーザーエクスペリエンスの正しいフローを確保するのに役立ちます。 Yiiの機能テストは通常​​、Codeceptionの受容テスト機能を活用します。

機能テストは通常​​、 tests/functionalディレクトリに配置され、 Codeception\Test\Functionalを拡張します。 HTTPレイヤーを介してアプリケーションと対話します。多くの場合、Codeceptionの組み込みのHTTPクライアントを使用してリクエストを行い、応答に対して主張します。

機能テストの例では、ユーザーが正常にログインできることを確認する場合があります。

 <code class="php"><?php namespace tests\functional\controllers; use tests\functional\FunctionalTester; class SiteCest { public function login(FunctionalTester $I) { $I->amOnPage('/site/login'); $I->fillField('LoginForm[username]', 'testuser'); $I->fillField('LoginForm[password]', 'password'); $I->click('Login'); $I->see('Logout (testuser)', 'h1'); // Assuming successful login displays this } }</code>

YIIのテストフレームワーク内でテストを構築するためのベストプラクティス

効果的なテスト組織は、保守性と読みやすさに不可欠です。ここにいくつかのベストプラクティスがあります:

  • 独立したユニットテストと機能テスト:個別のディレクトリ( tests/unittests/functional )でユニットと機能テストを保持します。
  • 記述テスト名:テスト名は、テストの目的を明確に通知する必要があります(例: testValidEmailValidationtestSuccessfulUserLogin )。
  • テストを小さく焦点を合わせておく:各テストはコードの単一の側面に焦点を当てる必要があります。複数の無関係なものをチェックするテストは避けてください。
  • Arrange-act-Assertパターンに従ってください。セットアップ(アレンジ)、実行(ACT)、およびアサーション(アサート)の明確なセクションでテストを構成します。
  • フィクスチャーを使用してください。フィクスチャーを使用して、テスト用の一貫したデータをセットアップし、データベース状態への依存を避けます。
  • テストエッジケース:幸せなパスをテストしないでください。また、エッジのケースと潜在的なエラー条件をテストします。
  • テストを独立しておく:テストは互いに独立している必要があります。実行の順序は重要ではありません。

YiiのテストフレームワークをCI/CDパイプラインと統合します

テストをCI/CDパイプラインに統合することで、展開前にコードが徹底的にテストされることが保証されます。これには通常、CI/CDツール(Jenkins、GitLab CI、GitHubアクションなど)を使用して、すべてのコードコミットまたはプル要求でテストを自動的に実行します。

このプロセスでは、CI/CDツールを以下に設定することが含まれます。

  1. コードのチェックアウト:バージョン制御システムから最新のコードを取得します。
  2. 依存関係のインストール:必要なすべてのPHPパッケージと拡張機能をインストールします。
  3. テストの実行: yii testコマンドを実行して、ユニットと機能テストを実行します。
  4. レポートの結果: CI/CDツールは、テスト結果を表示し、障害を報告する必要があります。多くの場合、ツールはテストフレームワークと統合してレポートを自動的に生成します。
  5. 条件付き展開:パイプラインをセットアップして、テストが合格した場合にのみ展開します。

Yiiの組み込みテストフレームワークとともに、さまざまなテストツールまたはライブラリを使用する

Yiiのフレームワークは強固な基盤を提供しますが、他のテストツールとライブラリを統合してテスト戦略を強化することができます。これには次のことが含まれる場合があります。

  • コードカバレッジツール: XdebugやPhpDBGなどのツールは、コードカバレッジを測定して、アプリケーションのテストされていない部分を識別できます。
  • モッキングライブラリ: YIIはいくつかのモッキング機能を提供しますが、予言やock笑などのライブラリはより高度なモッキング機能を提供できます。
  • BDDフレームワーク: Behatのような動作主導型開発(BDD)フレームワークは、より人間が読みやすい形式でテストを作成できるようにすることで、Yiiのテストフレームワークを補完できます。

統合には、競合を回避し、一貫性を維持するために慎重に計画する必要があることを忘れないでください。特定のニーズとプロジェクトの複雑さに基づいて追加のツールを選択します。多くの場合、Yiiの組み込みツールと慎重に選択された外部ライブラリの組み合わせは、最も包括的なテストアプローチを提供します。

以上がHow do I use Yii's testing framework to write unit tests and functional tests?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。