定義預期
斷言的工作方式與任何 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 可用,您可以對 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 也受到支援。可以將回應的 body 與 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
的實作。