クラス MockMvcTester

java.lang.ObjectSE
org.springframework.test.web.servlet.assertj.MockMvcTester

public final class MockMvcTester extends ObjectSE
MockMvcTester は、AssertJ を使用してサーバーリクエストを処理するために、MockMvcSpring MVC アプリケーションをテストするためのサポートを提供します。

テスターインスタンスは WebApplicationContext から作成できます。


 // Create an instance with default settings
 MockMvcTester mvc = MockMvcTester.from(applicationContext);

 // Create an instance with a custom Filter
 MockMvcTester mvc = MockMvcTester.from(applicationContext,
         builder -> builder.addFilters(filter).build());
 

次の内容を含むコントローラーインスタンスを提供することにより、テスターをスタンドアロンモードで作成できます。


 // Create an instance for PersonController
 MockMvcTester mvc = MockMvcTester.of(new PersonController());
 

リクエストビルダーを assertThat() でラップすると、アサーションにアクセスできるようになり、単純な単一ステートメントのアサーションを実行できます。たとえば、次のようになります。


 // perform a GET on /hi and assert the response body is equal to Hello
 assertThat(mvc.get().uri("/hi")).hasStatusOk().hasBodyTextEqualTo("Hello");
 

より複雑なシナリオでは、交換の結果を変数に割り当てて複数のアサーションを実行することができます。


 // perform a POST on /save and assert the response body is empty
 MvcTestResult result = mvc.post().uri("/save").exchange();
 assertThat(result).hasStatus(HttpStatus.CREATED);
 assertThat(result).body().isEmpty();
 

リクエストが非同期で処理されている場合、exchange はデフォルトのタイムアウトまたは指定されたタイムアウトを使用して、リクエストの完了を待機します。非同期リクエストの結果をすぐに取得したい場合は、asyncExchange を使用します。


 // perform a POST on /save and assert an asynchronous request has started
 assertThat(mvc.post().uri("/save").asyncExchange()).request().hasAsyncStarted();
 

MockMvc が使用する静的ビルダーアプローチを使用してリクエストを実行することもできます。例:


 // perform a GET on /hi and assert the response body is equal to Hello
 assertThat(mvc.perform(get("/hi")))
         .hasStatusOk().hasBodyTextEqualTo("Hello");
 

ここに統合したいカスタム RequestBuilder 実装がある場合は、このアプローチを使用します。このアプローチでは、非同期リクエストの追加処理なしで MockMvc も呼び出されます。

MockMvc と MockMvcTester の主な違いは、MockMvcTester を使用すると未解決の例外が直接スローされないことです。代わりに、未解決の例外MvcTestResult を使用できます。解決済みの例外と未解決の例外はどちらも、次のようにアサートできる失敗と見なされます。


 // perform a GET on /boom and assert the message for the exception
 assertThat(mvc.get().uri("/boom")).hasFailed()
         .failure().hasMessage("Test exception");
 

未解決の例外で結果にアクセスしようとすると、AssertionErrorSE がスローされます。


 // throw an AssertionError with an unresolved exception
 assertThat(mvc.get().uri("/boom")).hasStatus5xxServerError();
 

MockMvcTester は、生の値をアサートするのではなく、レスポンス本体を逆直列化できるように、メッセージコンバーターのリストを使用して構成できます。

導入:
6.2
作成者:
Stephane Nicoll, Brian Clozel
  • メソッドの詳細

    • create

      public static MockMvcTester create(MockMvc mockMvc)
      指定された MockMvc インスタンスに委譲するインスタンスを作成します。
      パラメーター:
      mockMvc - MockMvc インスタンスに呼び出しを委譲する
    • from

      public static MockMvcTester from(WebApplicationContext applicationContext, FunctionSE<DefaultMockMvcBuilder,MockMvc> customizations)
      指定された完全に初期化された(つまり、リフレッシュされたWebApplicationContext を使用してインスタンスを作成します。指定された customizations は、最終的に基礎となる MockMvc インスタンスを作成する DefaultMockMvcBuilder に適用されます。

      基礎となる MockMvc インスタンスをさらにカスタマイズする必要がない場合は、from(WebApplicationContext) を使用します。

      パラメーター:
      applicationContext - アプリケーションコンテキストから Spring MVC インフラストラクチャとアプリケーションコントローラーを検出します
      customizations - DefaultMockMvcBuilder に基づいて MockMvc インスタンスを作成する関数
      関連事項:
    • from

      public static MockMvcTester from(WebApplicationContext applicationContext)
      指定された完全に初期化された(つまり、リフレッシュされたWebApplicationContext を使用してインスタンスを作成するためのショートカット。

      基礎となる MockMvc インスタンスをさらにカスタマイズする必要がある場合は、from(WebApplicationContext, Function) の使用を検討してください。

      パラメーター:
      applicationContext - アプリケーションコンテキストから Spring MVC インフラストラクチャとアプリケーションコントローラーを検出します
      関連事項:
    • of

      public static MockMvcTester of(CollectionSE<?> controllers, FunctionSE<StandaloneMockMvcBuilder,MockMvc> customizations)
      1 つ以上の @Controller インスタンスを登録し、Spring MVC インフラストラクチャをプログラムで構成してインスタンスを作成します。

      これにより、コントローラーとその依存関係のインスタンス化と初期化、および単純なユニットテストを完全に制御でき、同時に 1 つのコントローラーをテストすることもできます。

      パラメーター:
      controllers - テストする 1 つ以上の @Controller インスタンスまたは @Controller 型。型(Class)はインスタンスに変換されます
      customizations - StandaloneMockMvcBuilder に基づいて MockMvc インスタンスを作成する関数。通常は Spring MVC インフラストラクチャを構成するために使用します
      関連事項:
    • of

      public static MockMvcTester of(ObjectSE... controllers)
      1 つ以上の @Controller インスタンスを登録してインスタンスを作成するためのショートカット。

      アノテーション付きコントローラーを使用してリクエストを処理するために DispatcherServlet に必要な最小限のインフラストラクチャが作成されます。MVC インフラストラクチャの追加構成が必要な場合は、of(Collection, Function) の使用を検討してください。

      パラメーター:
      controllers - テストする 1 つ以上の @Controller インスタンスまたは @Controller 型。型(Class)はインスタンスに変換されます
      関連事項:
    • withHttpMessageConverters

      public MockMvcTester withHttpMessageConverters(IterableSE<HttpMessageConverter<?>> httpMessageConverters)
      指定されたメッセージコンバーターを使用して新しいインスタンスを返します。

      何も指定されていない場合は、レスポンス本文に対する基本的なアサーションのみが実行できます。JSON データ構造に対してアサーションを行うには、適切な JSON コンバーターを登録することを検討してください。

      パラメーター:
      httpMessageConverters - 使用するメッセージコンバーター
      戻り値:
      指定されたコンバーターを使用した新しいインスタンス
    • get

      HTTP GET リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • head

      HTTP HEAD リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • post

      HTTP POST リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • put

      HTTP PUT リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • patch

      HTTP PATCH リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • delete

      HTTP DELETE リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • options

      HTTP OPTIONS リクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • method

      指定された HttpMethod のリクエストを準備します。

      返されたビルダーを assertThat でラップして、結果に対するアサーションを有効にすることができます。複数ステートメントのアサーションの場合は、exchange() を使用して結果を割り当てます。非同期リクエストが完了するまでの待機時間をリクエストごとに制御するには、exchange(Duration) を使用します。

      戻り値:
      ターゲット URI を指定するためのリクエストビルダー
    • perform

      public MvcTestResult perform(RequestBuilder requestBuilder)
      指定された RequestBuilder を使用してリクエストを実行し、標準の AssertJ アサーションで使用できる result を返します。

      カスタム RequestBuilder を提供する必要がある場合は、このメソッドのみを使用します。通常の場合、ユーザーは、このインスタンスで使用可能なメソッドの 1 つ (HTTP GET の場合は get() など) を使用して、リクエストの構成を開始する必要があります。

      MockMvc.perform(RequestBuilder) とは異なり、リクエストが未解決の例外で失敗した場合、これは例外をスローしません。代わりに、結果には例外があればそれが提供されます。/boom に対する POST リクエストが IllegalStateException をスローすると仮定すると、次のコードは、呼び出しが実際に失敗し、予期したエラーメッセージが発生したことをアサートします。

      assertThat(mvc.post().uri("/boom")))
             .failure().isInstanceOf(IllegalStateException.class)
             .hasMessage("Expected");
       
      パラメーター:
      requestBuilder - 実行リクエストを準備するために使用される
      戻り値:
      assertThat でラップされる MvcTestResult
      関連事項: