期待の定義
アサーションは、他の 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) の実装を提供できます。