Defining Expectations
断言的运作方式与任何 AssertJ 断言相同。该支持为 MvcTestResult
的各个部分提供了专用的断言对象,如下例所示:
include-code::./HotelControllerTests[tag=get,indent=0]
如果请求失败,则该交换不会抛出异常。相反,你可以断言交换的结果失败:
include-code::./HotelControllerTests[tag=failure,indent=0]
该请求也有可能意外失败,即处理程序抛出的异常未得到处理并按原样抛出。你仍然可以使用 .hasFailed()
和 .failure()
,但任何尝试访问结果的一部分都会抛出一个例外,因为交换尚未完成。
JSON Support
MvcTestResult
的 AssertJ 支持通过 bodyJson()
提供 JSON 支持。
如果提供 JSONPath, 您可以针对 JSON 文档应用表达式。返回值提供了方便的方法来针对各种受支持的 JSON 数据类型返回一个专门的 Assert 对象:
-
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")
如果您希望使用其他库,可以提供https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/json/JsonComparator.html[JsonComparator
] 的一个实现。