クラス MockMvcTester
MockMvcTester
は、AssertJ を使用してサーバーリクエストを処理するために、MockMvc
で Spring 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");
未解決の例外で結果にアクセスしようとすると、AssertionError
SE がスローされます。
// throw an AssertionError with an unresolved exception
assertThat(mvc.get().uri("/boom")).hasStatus5xxServerError();
MockMvcTester
は、生の値をアサートするのではなく、レスポンス本体を逆直列化できるように、メッセージコンバーターのリストを使用して構成できます。
- 導入:
- 6.2
- 作成者:
- Stephane Nicoll, Brian Clozel
ネストされたクラスのサマリー
修飾子と型クラス説明final class
AssertJ をサポートするMockMultipartHttpServletRequest
のビルダー。final class
AssertJ をサポートするMockHttpServletRequest
のビルダー。方法の概要
修飾子と型メソッド説明static MockMvcTester
指定されたMockMvc
インスタンスに委譲するインスタンスを作成します。delete()
HTTP DELETE リクエストを準備します。static MockMvcTester
from
(WebApplicationContext applicationContext) 指定された完全に初期化された(つまり、リフレッシュされた)WebApplicationContext
を使用してインスタンスを作成するためのショートカット。static MockMvcTester
from
(WebApplicationContext applicationContext, FunctionSE<DefaultMockMvcBuilder, MockMvc> customizations) 指定された完全に初期化された(つまり、リフレッシュされた)WebApplicationContext
を使用してインスタンスを作成します。get()
HTTP GET リクエストを準備します。head()
HTTP HEAD リクエストを準備します。method
(HttpMethod method) 指定されたHttpMethod
のリクエストを準備します。static MockMvcTester
1 つ以上の@Controller
インスタンスを登録してインスタンスを作成するためのショートカット。static MockMvcTester
of
(CollectionSE<?> controllers, FunctionSE<StandaloneMockMvcBuilder, MockMvc> customizations) 1 つ以上の@Controller
インスタンスを登録し、Spring MVC インフラストラクチャをプログラムで構成してインスタンスを作成します。options()
HTTP OPTIONS リクエストを準備します。patch()
HTTP PATCH リクエストを準備します。perform
(RequestBuilder requestBuilder) post()
HTTP POST リクエストを準備します。put()
HTTP PUT リクエストを準備します。withHttpMessageConverters
(IterableSE<HttpMessageConverter<?>> httpMessageConverters) 指定されたメッセージコンバーターを使用して新しいインスタンスを返します。
メソッドの詳細
create
指定された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
指定された完全に初期化された(つまり、リフレッシュされた)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
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
指定された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
- 関連事項: