定义期望
断言的工作方式与任何 AssertJ 断言相同。该支持提供专用的
assert 对象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")
如果请求失败,则 exchange 不会引发异常。相反,您可以断言 交换结果失败:
-
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 支持
AssertJ 对MvcTestResult
通过以下方式提供 JSON 支持bodyJson()
.
如果 JSONPath 可用,则可以应用表达式 在 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"))
您还可以将原始内容转换为任何数据类型,只要消息 converter 配置正确:
-
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
提供泛型 assert 对象。对于更复杂的类型,
您可能想要使用AssertFactory
相反,它会返回一个专用的 assert 类型,如果
可能:
-
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。主体
response 可以与Resource
或内容。如果内容以
'.json ' 我们在 Classpath 上查找与该名称匹配的文件:
-
Java
-
Kotlin
assertThat(mockMvc.get().uri("/family")).bodyJson()
.isStrictlyEqualTo("sample/simpsons.json");
assertThat(mockMvc.get().uri("/family")).bodyJson()
.isStrictlyEqualTo("sample/simpsons.json")
如果您更喜欢使用其他库,则可以提供JsonComparator
.