依存性注入をレバレッジして、テスト可能性を向上させます
依存関係注入(DI)は、PHP 8コードのテストティビティを大幅に高めます。 クラス内で直接オブジェクトを作成する代わりに、依存関係としてそれらを注入します。これにより、テスト中に実際の依存関係をモックオブジェクトに簡単に置き換えることができます。 たとえば、データベースと相互作用するA User
クラスを検討してください:
// Without DI class User { public function getUserById(int $id): ?array { $db = new Database(); // Tight coupling! return $db->query("SELECT * FROM users WHERE id = $id"); } } // With DI class User { private Database $database; public function __construct(Database $database) { $this->database = $database; } public function getUserById(int $id): ?array { return $this->database->query("SELECT * FROM users WHERE id = $id"); } }
diの例では、User
クラスはコンストラクターに渡されるDatabase
オブジェクトに依存します。 テスト中、事前定義されたデータを返すMockデータベースオブジェクトを挿入し、実際のデータベース接続の必要性を排除し、テストをより速く、より信頼性の高いものにすることができます。 これにより、User
クラスのロジックが外部依存関係から分離され、テスト中の機能のみに焦点を合わせることができます。 Phpunitのような人気のあるモッキングフレームワークは、これらのモックオブジェクトを簡単に作成できます。テスト:
コンストラクターインジェクション:コンストラクターを介して依存関係を注入することを好みます。これにより、依存関係が明示的になり、オブジェクトが常に有効な状態にあることを保証します。
インターフェイスベースの依存関係:依存関係注射は、ゆるいカップリングの基礎です。依存関係を内部で作成するのではなく注入することにより、アプリケーションのさまざまな部分間の相互依存性を減らします。 これは、いくつかの利点につながります:
過剰ock笑:内部依存関係をock笑しないでください。 外部システムまたはサービスのみをock笑することに焦点を当てます。モッキング過剰は、壊れやすく過度に複雑なテストにつながる可能性があります。
エラー処理を無視してください:
テストが依存関係によってスローされた潜在的な例外またはエラーを処理することを確認します。 すべてが常に完全に機能すると仮定しないでください。以上が依存関係注射を使用して、PHP 8のテスト可能性を改善するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。