2017-10-13 8 views
0

なぜ、Springブートガイドに2種類の統合テストが含まれているのか分かりませんか? (https://github.com/spring-guides/gs-spring-boot#add-unit-testsなぜ、Springブートで異なるタイプの統合テストが行​​われるのですか?

TestRestTemplateと1つとMockMvc依存関係のあるものは1つですか?各テストタイプでは、スプリングブートはテスト環境をブートストラップします。だからこの分離の理由は何ですか?

答えて

1

MockMvcを使用すると、HTTPリクエストサイクルが偽装されたアプリケーションのインスタンスがテストされます。したがって、ここのテストスコープは、アプリケーションのMVCの側面に過ぎません。私はこれが典型的には "統合テスト"と呼ばれるとは思わないが、ユニットテストに近い(そのスコープは単一のクラスよりもかなり大きいが)。

TestRestTemplateを使用すると、アプリケーションのリアルインスタンスがテストされているため、アプリケーションコンテキスト全体が「跳ね上がり」、外部のアクタとして呼び出されています。これは通常、「統合テスト」と呼ばれ、実際の使用に最も近いテストである可能性があります。

TestRestTemplateで呼び出される「完全スタック」統合テストでは、MockMVCテストで提供されるカバレッジのスーパーセットが提供されるため、MockMVCテストでどうして迷惑をかけるのだろうかと疑問に思うかもしれません。もしそうなら、私はこれがの質問だと思う...

  • テストスコープ; MockMVCテストケースは、通常、完全な統合テストよりも短時間で簡単に実行できます(アプリケーションのコンテキストを使用しないため)。さらに、彼らはあなたのアプリケーションコンテキストを使用していないので、テストでうまく動かないアプリケーションコンテキストのリアルアプリケーションの側面を模倣するのは難しいように動作する必要はありません。

  • 使いやすさ; MockMVCには、HTTPステータスのアサート、JSONレスポンスに対する問い合わせ、アサートなどのための静的ヘルパーが付属しています。もちろん、YMMMVですが、多くの人にとって、これらは容易に開発でき、読みやすいテストケースを実現するのに役立ちます。すべての呼び出しのためのすべてのマッピング、幸せと悲しいパスを含む全体のコントローラ層の詳細なテストのための

    • MockMVCテスト:実際には

    、あなたはおそらく、両方のアプローチを組み合わせて使用​​することをお勧めしますHTTPステータスコード、コンテンツ本体などに深いアサーションを追加

  • TestRestTemplateユーザーの視点から表現されるメインフローのテストユーザーが/参照に興味があるのビットに焦点を当てたアサーションとSave a new FooSearch for all FoosSubmit an invalid Foo updateなど。
+0

は、詳細な説明をありがとう!私が確認できない唯一のことは、MockMVCテストがより速いことです。それはまったく同じ時間がかかる(私のマシン上で) – DimarZio

関連する問題