私は現在、バックエンドでPHPを使用するAjaxチャットアプリケーションを開発しています。現在、その機能のいくつかは、パブリックとプライベートのさまざまなタイプのユーザー(admin/mod/banned)です。部屋、コマンド、アナウンス。私は最近ユニット/統合テストについて学びました、そしてそれは私が新しい機能をリリースするたびにすべてを手動でテストするための良い代替手段のように聞こえます。
PHPアプリケーションにテスト機能を追加するにはどうすればよいですか?
ところで、アプリはロングポーリングを使用します(ここでPHPはusleep()を介して接続を保持し、新しい情報が返されるまで常にデータベースにクエリします)。そのため、テストするときに問題になると思います。
ユニットテストと統合/システムテストの違いを必ず理解してください。
単体テストは、単体テストが失敗した場合にバグの検索を絞り込むことができるほど細かいコードの一部を扱います。ここには長い投票はありません。 REST呼び出しなし。AJAXなし。データベースアクセスなし。REST、ファイルへのアクセス、データベース呼び出し、およびテスト済みコードの外部にあるすべての操作がモックされます。つまり、モックまたはスタブが作成されます。テストしたユニットに必要なすべてのもの。
製品のフィルタリングをテストする場合は、データベースを置き換えて、テスト目的で使用するサンプル製品を提供するstubを使用します。
購入アクションにより倉庫内の製品の数量が減少するかどうかをテストする場合は、モックを使用します。これにより、テストされたユニットによって実際に呼び出され、数量を減らすように求められます。
エコシステムに応じて、また人から人へ、ユニットテストに何があり、何が大きく変わることはないかの厳密さ:ユニットテストでデータベースアクセスなどを使用している熟練した人がいるのに、ひどい人もいるでしょう。選択した言語とコミュニティーを考慮して、自分がどれだけ純粋主義者であり、どの常識があなたに指示するかを決定するのはあなた次第です。
アプリケーションの重要な部分をカバーする単体テストができたら、部品の組み立てを開始できます。システムのさまざまなコンポーネント間のインターフェースは、間違いを起こすのに適した場所であるため、コンポーネントの統合もテストする必要があります。これが統合テストの意味です。
すべてのブリックがシステムに結合されると、たとえ統合テストで問題が明らかにならなくても、このシステムは期待どおりに機能しない可能性があります。ここでは、システムテストが機能します。
これらのテストは、開発者やQA部門が利用できる唯一のテストではないことに注意してください。 機能テスト、受け入れテストなどがあります。たとえば、人気が高まると期待されるテストの1つは、Webページの差分画像を撮り、可能なものを検査することです純粋にクライアント側のレンダリングとサーバー側の処理ミスの両方を検出するための違い。
このすべてのテストは回帰テストに役立ちます。つまり、変更によって何も破壊されていないことを確認できるテストです。 継続的インテグレーションと組み合わせると、何がいつ壊れたのかを正確に特定でき、継続的デリバリーを使用できるようになります。これらのテストは、破損したリビジョンのリスクを軽減します。自動的に本番環境に投入されます。