期待の定義
アサーションは、他の AssertJ アサーションと同じように機能します。次の例に示すように、サポートでは、MvcTestResult のさまざまな部分に専用のアサートオブジェクトが提供されます。
Java
Kotlin
assertThat(mockMvc.get().uri("/hotels/{id}", 42))
.hasStatusOk()
.hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON)
.bodyJson().isLenientlyEqualTo("sample/hotel-42.json");assertThat(mockMvc.get().uri("/hotels/{id}", 42))
.hasStatusOk()
.hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON)
.bodyJson().isLenientlyEqualTo("sample/hotel-42.json")リクエストが失敗した場合、交換は例外をスローしません。代わりに、交換の結果が失敗したことをアサートできます。
Java
Kotlin
assertThat(mockMvc.get().uri("/hotels/{id}", -1))
.hasFailed()
.hasStatus(HttpStatus.BAD_REQUEST)
.failure().hasMessageContaining("Identifier should be positive");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 データ型専用のアサートオブジェクトを返す便利なメソッドを提供します。
Java
Kotlin
assertThat(mockMvc.get().uri("/family")).bodyJson()
.extractingPath("$.members[0]")
.asMap()
.contains(entry("name", "Homer"));assertThat(mockMvc.get().uri("/family")).bodyJson()
.extractingPath("$.members[0]")
.asMap()
.contains(entry("name", "Homer"))メッセージコンバーターが適切に構成されている限り、生のコンテンツを任意のデータ型に変換することもできます。
Java
Kotlin
assertThat(mockMvc.get().uri("/family")).bodyJson()
.extractingPath("$.members[0]")
.convertTo(Member.class)
.satisfies(member -> assertThat(member.name).isEqualTo("Homer"));assertThat(mockMvc.get().uri("/family")).bodyJson()
.extractingPath("$.members[0]")
.convertTo(Member::class.java)
.satisfies(ThrowingConsumer { member: Member ->
assertThat(member.name).isEqualTo("Homer")
}) ターゲット Class に変換すると、汎用アサートオブジェクトが提供されます。より複雑な型の場合は、可能であれば、代わりに専用のアサート型を返す AssertFactory を使用することをお勧めします。
Java
Kotlin
assertThat(mockMvc.get().uri("/family")).bodyJson()
.extractingPath("$.members")
.convertTo(InstanceOfAssertFactories.list(Member.class))
.hasSize(5)
.element(0).satisfies(member -> assertThat(member.name).isEqualTo("Homer"));assertThat(mockMvc.get().uri("/family")).bodyJson()
.extractingPath("$.members")
.convertTo(InstanceOfAssertFactories.list(Member::class.java))
.hasSize(5)
.element(0).satisfies(ThrowingConsumer { member: Member ->
assertThat(member.name).isEqualTo("Homer")
})JSONAssert (英語) もサポートされています。レスポンスの本文は、Resource またはコンテンツと照合できます。コンテンツが `.json ` で終わる場合は、クラスパス上でその名前に一致するファイルを検索します。
Java
Kotlin
assertThat(mockMvc.get().uri("/family")).bodyJson()
.isStrictlyEqualTo("sample/simpsons.json");assertThat(mockMvc.get().uri("/family")).bodyJson()
.isStrictlyEqualTo("sample/simpsons.json") 別のライブラリを使用する場合は、JsonComparator (Javadoc) の実装を提供できます。