web-dev-qa-db-ja.com

SpringのMockMvcは単体テストまたは統合テストに使用されますか?

SpringにはMockMvcの2つのセットアップがあります。

  1. スタンドアロンセットアップ
  2. WebApplicationContextのセットアップ

一般的に、MockMvcはどのような種類のテストに使用されますか?ユニットまたは統合?または両方?

スタンドアロンセットアップ(Springのアプリケーションコンテキストの外で実行)を使用すると、単体テストを記述でき、WebApplicationContextセットアップを使用すると、統合テストを記述できると私は言っていますか?

16

Spring DispatcherServletとサポートインフラストラクチャとのコードの統合をテストしているため、どちらの形式も実際には統合テストです。違いは、裏で使用されるサポートインフラストラクチャの量にあります。

詳細は、Springリファレンスマニュアルに記載されています。

注目すべき抜粋:

"webAppContextSetup"は実際のSpring MVC構成をロードし、より完全な統合テストをもたらします。 TestContextフレームワークはロードされたSpring構成をキャッシュするため、テストが追加されてもテストを高速に実行し続けるのに役立ちます。さらに、Webレイヤーのテストに集中するために、Spring構成を介してコントローラーにモックサービスを注入できます。

...

一方、「standaloneSetup」は、単体テストに少し近いです。一度に1つのコントローラーをテストし、コントローラーにモックの依存関係を手動で挿入できます。Spring構成のロードは含まれません。このようなテストはスタイルに焦点が絞られており、どのコントローラーがテストされているか、特定のSpring MVC構成が機能する必要があるかどうかなどを簡単に確認できます。 "standaloneSetup"は、特定の動作を確認したり、問題をデバッグしたりするためのアドホックテストを作成するための非常に便利な方法でもあります。

...

統合テストと単体テストの場合と同様に、正解や不正解はありません。 "standaloneSetup"を使用すると、Spring MVC構成を検証するためにいくつかの追加の "webAppContextSetup"テストが必要になることを意味します。または、「webAppContextSetup」を使用してすべてのテストを記述し、常に実際のSpring MVC構成に対してテストすることを決定できます。

...

Spring MVCテストで提供されるオプションは、クラシックユニットから完全な統合テストまで、さまざまな段階で提供されます。確かに、Spring MVC Testのオプションはどれも古典的な単体テストではありませんが、少し近いです。たとえば、モックをコントローラーに挿入してサービスレイヤーを分離してから、上のレイヤーとは別にデータベースレイヤーをテストする場合と同じように、DispatcherServletを介してのみ、実際のSpring構成でWebレイヤーをテストします。または、一度に1つのコントローラーに焦点を合わせてスタンドアロンのセットアップを使用し、それを機能させるために必要な構成を手動で提供することもできます。

疑問がある場合は、質問を投稿する前にまずリファレンスマニュアルを読むことをお勧めします。 ;)

よろしく、

Sam(Spring TestContext Frameworkの作成者

36
Sam Brannen

どちらの方法も統合テスト用だと思いますが、スタンドアロンでは、テストするコントローラーを指定する必要があります。

WebApplicationContextセットアップはコンテキスト全体をロードしているため、たとえば/people POSTリクエストを処理する特定のコントローラーがどこにあるかは気にしません。

したがって、REST APIをアプリケーションが動作する必要があるインターフェイスの観点からテストするためにWebApplicationContextセットアップを使用することをお勧めします。実際のコードとテストを組み合わせないでください+アプリの動作方法を文書化しています。

0
freakman