期待の定義

アサーションは、他の AssertJ アサーションと同じように機能します。次の例に示すように、サポートでは、MvcTestResult のさまざまな部分に専用のアサートオブジェクトが提供されます。

assertThat(mockMvc.get().uri("/hotels/{id}", 42))
		.hasStatusOk()
		.hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON)
		.bodyJson().isLenientlyEqualTo("sample/hotel-42.json");

リクエストが失敗した場合、交換は例外をスローしません。代わりに、交換の結果が失敗したことをアサートできます。

assertThat(mockMvc.get().uri("/hotels/{id}", -1))
		.hasFailed()
		.hasStatus(HttpStatus.BAD_REQUEST)
		.failure().hasMessageContaining("Identifier should be positive");

リクエストが予期せず失敗する可能性もあります。つまり、ハンドラーによってスローされた例外が処理されず、そのままスローされるのです。.hasFailed() と .failure() は引き続き使用できますが、交換が完了していないため、結果の一部にアクセスしようとすると例外がスローされます。

JSON サポート

MvcTestResult に対する AssertJ サポートは、bodyJson() を介して JSON サポートを提供します。

JSONPath [GitHub] (英語) が利用可能な場合は、JSON ドキュメントに式を適用できます。返される値は、サポートされているさまざまな JSON データ型専用のアサートオブジェクトを返す便利なメソッドを提供します。

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.extractingPath("$.members[0]")
		.asMap()
		.contains(entry("name", "Homer"));

メッセージコンバーターが適切に構成されている限り、生のコンテンツを任意のデータ型に変換することもできます。

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.extractingPath("$.members[0]")
		.convertTo(Member.class)
		.satisfies(member -> assertThat(member.name).isEqualTo("Homer"));

ターゲット Class に変換すると、汎用アサートオブジェクトが提供されます。より複雑な型の場合は、可能であれば、代わりに専用のアサート型を返す AssertFactory を使用することをお勧めします。

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.extractingPath("$.members")
		.convertTo(InstanceOfAssertFactories.list(Member.class))
		.hasSize(5)
		.element(0).satisfies(member -> assertThat(member.name).isEqualTo("Homer"));

JSONAssert (英語) もサポートされています。レスポンスの本文は、Resource またはコンテンツと照合できます。コンテンツが `.json ` で終わる場合は、クラスパス上でその名前に一致するファイルを検索します。

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.isStrictlyEqualTo("sample/simpsons.json");

別のライブラリを使用する場合は、JsonComparator (Javadoc) の実装を提供できます。