クラス 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");
未解決の例外で結果にアクセスしようとすると、AssertionErrorSE がスローされます。
// throw an AssertionError with an unresolved exception
assertThat(mvc.get().uri("/boom")).hasStatus5xxServerError();
MockMvcTester は、生の値をアサートするのではなく、レスポンス本体を逆直列化できるように、メッセージコンバーターのリストを使用して構成できます。
- 導入:
- 6.2
- 作成者:
- Stephane Nicoll, Brian Clozel
ネストされたクラスの要約
ネストされたクラス修飾子と型クラス説明final classAssertJ をサポートするMockMultipartHttpServletRequestのビルダー。final classAssertJ をサポートするMockHttpServletRequestのビルダー。メソッドのサマリー
修飾子と型メソッド説明static MockMvcTester指定されたMockMvcインスタンスに委譲するインスタンスを作成します。delete()HTTP DELETE リクエストを準備します。static MockMvcTesterfrom(WebApplicationContext applicationContext) 指定された完全に初期化された(つまり、リフレッシュされた)WebApplicationContextを使用してインスタンスを作成するためのショートカット。static MockMvcTesterfrom(WebApplicationContext applicationContext, FunctionSE<DefaultMockMvcBuilder, MockMvc> customizations) 指定された完全に初期化された(つまり、リフレッシュされた)WebApplicationContextを使用してインスタンスを作成します。get()HTTP GET リクエストを準備します。head()HTTP HEAD リクエストを準備します。method(HttpMethod method) 指定されたHttpMethodのリクエストを準備します。static MockMvcTester1 つ以上の@Controllerインスタンスを登録してインスタンスを作成するためのショートカット。static MockMvcTesterof(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- 関連事項: