1

レポートアプリケーション(PHP)に取り組んでいます。このアプリには、UI に膨大な量のさまざまなフィルター、グラニュレーションなどがあり、それらのフィルターなどに基づいて、バックエンドは大規模なクエリを構築し、データベースから数百行のデータを取得します。

このようなものの単体テストを作成するにはどうすればよいでしょうか?

いくつかの既知のデータを使用してテスト データベースを作成するとします。返されたデータ セット (フィルター設定に関係なく) をテストでハードコーディングされた SQL クエリと比較する一連のテストを作成しますか?

これは、スキーマを変更する場合、テストのすべての SQL クエリに戻って変更する必要があることを意味しますか?

4

1 に答える 1

0

単体テストは、実際のコードやデータを使用する方法でのテストではありません。作業するすべてのものをモックします。あなたが説明している方法でテストしたり、テストする必要はありません。取得したデータをテストしているのではなく、メソッドが処理した後にフィードしたデータが期待どおりまたは類似していることだけをテストしています。

たとえば、データベースから取得したデータを返すメソッドがある場合、データベースはテストとは関係ありません。そのメソッドとそこにあるロジックだけをテストしています。その中でどのメソッドを呼び出すことができるか、その中のそれらのメソッドが何をするかについての期待(アサーションを実行できる値のジェネリック表現を返すなど)など、およびそのメソッドの外側のすべてがモックされます(つまり、ジェネリック表現)。

簡単な例では、何かのセッターである 1 つのメソッドと、その何かのゲッターとして使用される 1 つのメソッドを作成した場合、セッターを使用するとゲッターが同じ値を返すというテストを記述します。 ...ブーム、両方の方法がテストされています。

これが、TDD (テスト駆動開発) について耳にする理由です。最初は直感に反するように感じるかもしれませんが、開発者はテスト可能なコードを作成するために必要な要素をまとめる必要があり、最終的にはより優れたコードにつながります。はい、完全に機能するコードを書くことはできますが、必ずしもテスト可能 (またはほとんど不可能) であるとは限りません。たとえば、リンゴの数を返すメソッドを作成する代わりに、プロジェクトのその部分で使用している果物の種類に関係なく、オブジェクト タイプを注入するメソッドを作成できます (オレンジ、リンゴ、ナシ、または果物でさえありません)。それはそのメソッドを再利用可能にし、またあなたがそうしないことを意味します'

とにかく、コードの例とテストを提供して、問題が何であるかを確認してください。

于 2012-12-22T05:54:29.607 に答える