web-dev-qa-db-ja.com

単体テストと統合テストの違いは何ですか?

単体テストと統合テストの違いは何ですか?

これらのテストに異なる名前はありますか?単体テスト機能テストなどを呼ぶ人のように?

347
Books

単体テストは、比較的小さなコードが意図したとおりの動作をしていることを確認するためにプログラマーによって書かれたテストです。それらは範囲が狭く、書きやすく、実行しやすいものでなければならず、そしてそれらの有効性はプログラマーが何を役に立つと考えるかにかかっています。テストはプログラマーの使用を目的としていますが、他の誰かに直接役立つものではありませんが、彼らの仕事をするのであれば、テスターと下流のユーザーはバグを減らすことで恩恵を受けるはずです。

単体テストであることの一部は、テスト中のコードの外側のものがモックアップされたりスタブアウトされたりすることです。単体テストは外部システムに依存してはいけません。彼らは彼らがいくつかの外部システムとうまく遊ぶことを証明するのではなく、内部の一貫性をテストします。

統合テストは、システムのさまざまな部分が連携して動作することを実証するために行われます。統合テストはアプリケーション全体をカバーすることができ、それらをまとめるにはもっと多くの努力が必要です。通常、データベースインスタンスやハードウェアなどのリソースを割り当てます。統合テストは、少なくとも統合テスト環境が本番環境に似ているという点で、単体テストのセットよりもシステムの動作を(特にプログラマー以外のユーザーに)実証するより説得力のある仕事をします。

実際に「統合テスト」は、実稼働に似せて作られた環境に対する完全なシステムテストから、モックアウトされていないリソース(データベースやキューなど)を使用するテストまで、さまざまなことに使用されます。スペクトルの下限では、統合テストはリポジトリがインメモリデータベースに対して実行されるジュニットテストであり、上限ではアプリケーションがメッセージを交換できることを検証するシステムテストです。

546
Nathan Hughes

単体テストは、テストされた単体テスト以外のコードに依存しないようにする必要があります。あなたはユニットが最小のテスト可能な部分を探すことによって何であるかを決定します。依存関係がある場合は、それらを偽のオブジェクトに置き換える必要があります。モック、スタブ。テスト実行スレッドは、テスト可能な最小単位内で開始および終了します。

偽のオブジェクトが実際のオブジェクトに置き換えられ、実行スレッドが他のテスト可能なユニットに交差することをテストすると、統合テストが行​​われます。

87
Dave

単体テストは(可能な限り)完全に独立して行われます。

統合テストは、テスト対象のオブジェクトまたはモジュールが他のコードと一緒に正常に動作しているときに行われます。

41

単体テストはあなたが完全に制御できるコードをテストしますが、統合テストはあなたのコードがどのように使われるか、または他のコードと「統合する」かをテストします。

したがって、自分のライブラリが意図したとおりに機能することを確認するためにユニットテストを作成し、次にコードを使用している他のコード、たとえばライブラリとうまく動作することを確認するために統合テストを作成します。

機能テストは統合テストに関連していますが、より具体的には、すべてのコードを一緒に実行しながらシステム全体またはアプリケーションをテストするテスト、ほぼスーパー統合テストを指します。

14
Karl Rosaen

単体テストは通常​​、ソフトウェアモジュールに実装された単一の機能に対して行われます。テストの範囲は完全にこのSWモジュール内にあります。単体テストで最終的な機能要件が満たされることはありません。ホワイトボックステストの方法論にあります。

統合テストは、さまざまなSWモジュールの実装を確認するために行われます。テストは通常​​、ソフトウェア開発でモジュールレベルの統合が行われた後に実行されます。このテストは機能要件をカバーしますが、システム検証を保証するのに十分ではありません。

11
Jeganraj