この質問は、多かれ少なかれプログラミング言語に依存しません。しかし、私は最近 Java に夢中になっているので、そこから例を引き出します。OOP のケースについても考えているので、メソッドをテストする場合は、そのメソッド クラスのインスタンスが必要です。
単体テストのコア ルールは、自律的であるべきであり、依存関係からクラスを分離することで達成できるということです。それにはいくつかの方法があり、 IoCを使用して依存関係を注入するかどうか(Java の世界では、注入機能を提供する Spring、EJB3 およびその他のフレームワーク/プラットフォームがあります) および/またはオブジェクトをモックするかどうか (Java の場合は、JMockおよびEasyMock ) を使用して、テスト対象のクラスをその依存関係から分離します。
異なるクラス*でメソッドのグループをテストする必要があり、それらが適切に統合されていることを確認する必要がある場合は、統合テストを作成します。そして、ここに私の質問があります!
- 少なくとも Web アプリケーションでは、多くの場合、状態はデータベースに永続化されます。単体テストと同じツールを使用して、データベースからの独立性を実現できます。しかし、私の謙虚な意見では、統合テストにデータベースを使用しないことがあまりにも嘲笑されている場合があると思います (ただし、異議を唱えることは自由です。データベースをまったく使用しないことは、質問を無関係にするため、有効な答えでもあります)。 )。
- 統合テストにデータベースを使用する場合、そのデータベースにどのようにデータを入力しますか? 私は2つのアプローチを見ることができます:
- 統合テスト用のデータベース コンテンツを保存し、テストを開始する前にロードします。それが SQL ダンプ、データベース ファイル、XML などとして保存されている場合、興味深い情報が得られます。
- API 呼び出しによって必要なデータベース構造を作成します。これらの呼び出しは、おそらくテスト コード内でいくつかのメソッドに分割され、これらのメソッドのそれぞれが失敗する可能性があります。統合テストが他のテストに依存していると見なされる可能性があります。
テストに必要なデータベース データが必要なときに確実に存在するようにするにはどうすればよいですか? また、なぜその方法を選んだのですか?
興味深い部分は動機にあるので、動機とともに答えてください。「それがベストプラクティスです!」と言っているだけであることを忘れないでください。本当の動機ではなく、読んだり誰かから聞いたりしたことを繰り返しているだけです。その場合、それがベストプラクティスである理由を説明してください。
*技術的に正しくない可能性がありますが、単体テストの定義に、同じクラスの (同じまたは他の) インスタンスで他のメソッドを呼び出す 1 つのメソッドを含めています。お気軽に訂正してください。