Laravel 開発: Laravel Testing を使用して効率的な単体テストを行うにはどうすればよいですか?
Laravel は PHP 開発の主要なフレームワークであり、学習しやすく、使いやすく、完全な機能を備えているため、大多数の PHP 開発者に愛されています。適切なテストはアプリケーションの品質と安定性を向上させるため、開発プロセスではテストが非常に重要です。
Laravel フレームワークには Laravel テスト ツールが組み込まれており、開発者が効率的な単体テストを迅速に作成できるようになります。この記事では、Laravel Testingを使って単体テストを効率的に行う方法を紹介します。
なぜ単体テストを行うのか?
開発プロセスにおいて、単体テストは非常に重要なリンクです。
単体テストを使用すると、コード開発における問題のリスクが大幅に軽減され、コードの品質と安定性が向上します。
Laravel Testing を単体テストに使用する利点
単体テストを実行するには、開発者はテスト フレームワークを使用して、テスト ケースが正常に動作することを確認し、問題やエラーを迅速に検出する必要があります。 Laravel Testing は、Laravel フレームワークの中で非常に人気のあるテスト フレームワークです。このフレームワークには次の利点があります:
Laravel テストの基本構造
テスト ケースを作成する前に、Laravel テストの基本構造を理解する必要があります。 Laravel テスト ケースも、他の Laravel コンポーネントと同様にクラスです。このクラスは PHPUnitFrameworkTestCase クラスを継承し、Laravel フレームワークのさまざまなサービスにアクセスできる必要があります。たとえば、テスト中にコンソール コマンドにアクセスする必要がある場合は、Artisan::call メソッドを使用できます。
Laravel Testing の基本構造は次のとおりです:
<?php namespace TestsUnit; use PHPUnitFrameworkTestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
このクラスには、テスト ケースのサンプル メソッド testBasicTest() が含まれています。テスト メソッドは別個の単一テストとして扱う必要があるため、テストの目的に応じてテスト メソッドに名前を付けることが最善です。
テスト ケースの作成
テスト ケースの作成プロセスは通常、次の手順に分かれています。
テストの定義
テスト ケースを定義するプロセスには、通常、次の側面が含まれます。
テスト環境をセットアップする
テストを開始する前に、テスト環境をセットアップする必要があります。 .env.testing ファイルを作成して、そのファイルにテスト環境変数を設定します。 Laravel フレームワークは、アプリケーションのロード時にこのファイルを自動的に検出し、デフォルトでこのファイルの設定を使用します。
.env.testing の例:
APP_NAME=Laravel APP_ENV=testing APP_KEY= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=sqlite DB_DATABASE=:memory:
他の設定も .env.testing ファイルで追加または変更できます。ここでは、軽量でテストが簡単なデータベース エンジンである sqlite データベースを使用します。
sqlite データベースを使用する場合、Laravel はデータの移行を自動的に完了するため、手動での移行は必要ありません。テストメソッドでデータベースにアクセスすると、Laravel はデータをデータベースに配置する移行を自動的に使用します。したがって、テスト実行中にスキーマを手動で定義する必要はありません。
簡単なサンプル テストを作成します:
tests/Unit/ExampleTest.php
<?php namespace TestsUnit; use PHPUnitFrameworkTestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
このテストをコンソールで実行するには、次のコマンドを使用します:
phpunit tests/Unit/ExampleTest.php
このテストを実行すると、テスト結果がコンソールに出力されます:
PHPUnit 8.5.1 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 00:00.010, Memory: 6.00 MB OK (1 test, 1 assertion)
テストが成功したことがわかります。
Laravel データベースの使用
Laravel アプリケーション内で定義された実際のデータベースにアクセスする必要がある場合があります。アプリケーションで Laravel の DB ファサードを使用する場合、Laravel は現在のアプリケーション環境を自動的に選択します。
テストは次の方法で実行できます。
$this->assertDatabaseHas('users', [ 'email' => 'test@example.com' ]);
このテスト方法では、ユーザーの保存と取得をテストします。ここでは、assertDatabaseHas() を使用してデータが存在するかどうかをテストするアサーションを追加します。
データベースにレコードを挿入したい場合は、次の方法を使用できます:
$user = factory(User::class)->create(); $this->assertDatabaseHas('users', [ 'email' => $user->email ]);
偽のオブジェクトを使用する
Laravel が提供する Mockery オブジェクト ライブラリを使用して、モック オブジェクトと推移的な依存関係を生成します。高価なハードコーディングされたオブジェクトの代わりに Mockery モック フレームワークを使用し、これらのモック サービスを他の依存関係、テスト オブジェクト、またはより大きなコンポーネントとともに活用します。
Mockery はコードを大幅に簡素化し、アプリケーションの品質と保守性を向上させます。
$string = Mockery::mock('IlluminateHttpRequest');
$string->shouldReceive('input')
->once() ->andReturn('Welcome to Laravel Testing');
$this->assertTrue(strlen($string->input()) === 23);
在上面的代码示例中,我们首先创建了一个伪造对象$string,它是IlluminateHttpRequest的模拟实例。然后我们编写测试用例来测试模拟实例$input方法的返回值。
完成这些步骤后,我们便可以快速编写测试用例,取得高效、可维护、高质量的程序。
总结
直接就知道程序的运行结果是不能保证代码完美运作,甚至有可能出现严重的错误。而单元测试能够较全面地检测应用程序的每个组成部分,从而确保应用程序的质量与稳定性。
在Laravel框架中,Laravel Testing是一种流行的测试框架。Laravel Testing是受欢迎的,因为它易于使用,与Laravel框架深度结合,并且具有广泛的使用情况与应用。
在编写测试用例时,应确保测试方法的名称明确地描述了测试的功能。在测试方法中,使用assert()和其他相关断言操作来测试方法。完成测试后,可以使用PHPUnit来运行测试。
因为Laravel Testing已经在Laravel框架中集成,所以它使得开发人员可以轻松地测试他们的应用程序。Laravel Testing使开发人员能够更自信地修改和更新代码,并确保不会对任何现有功能产生负面影响。
以上がLaravel 開発: Laravel Testing を使用して効率的な単体テストを行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。