12

データベースと Symfony2 の相互作用をテストするための現在のベスト プラクティスは何ですか? 簡単な CRUD セットアップがあり、テストが問題ないことを確認したいと考えています。現在、4 つのテストがあり、それぞれのテストで、作成、更新、削除、および一覧表示のアクションが問題なく行われていることを確認しています。

私のテスト ケースには、__construct と __destruct という 2 つの魔法のメソッドがあります。それらの中で、データベースを作成し、スキーマを作成し、後でデータベースを削除するために、「php app/console ...」で exec() を呼び出します。ただし、これは地獄のように遅く、複数のテストケースがあると常に発生します。

データベースのテストとそのようなテストの分離に関しては、どのように進めればよいですか?

4

4 に答える 4

8

テストが完全に分離されていることを確認するには、常にクリーンな状態から始めるのが最善だと思います。そのためには、各テストの前にデータベース構造を構築し、特定のテストに必要なフィクスチャで満たすだけです。

必要なデータベース テーブルのみを作成し、必要なフィクスチャのみを挿入していることに注意してください。大きなデータベース ダンプをロードするよりも少し高速です。また、テストがフィクスチャを共有しないため、よりクリーンになります (これにより、メンテナンスが容易になります)。

スキーマの構築に役立つ KernelAwareTest というベース テスト ケース クラスがあります。Gist で見つけることができます: https://gist.github.com/1319290

setUp()Symfony カーネルを起動し、それへの参照をクラス プロパティに保存します (DIC およびエンティティ マネージャーへの参照と共に)。また、データベース スキーマを生成するために への呼び出しgenerateSchema()が行われます (Doctrine の Schema Tool を使用します)。

デフォルトでは、エンティティ マネージャが認識しているすべてのエンティティのデータベース構造を生成します。メソッドをオーバーライドすることで、テスト クラスでこの動作を変更できますgetMetadatas()

PS: メモリ内データベース (sqlite) を使用してみましたが、完璧ではありませんでした。とにかく、本番環境で使用するデータベースに対してテストを実行する方がよいでしょう。

于 2012-05-05T16:08:23.687 に答える