为了单元测试的目的,我正在四处寻找类似的东西,并将下面的代码拼接在一起。它在 Kotlin 中,但应该相对容易转换为 Java 并解决您的问题(尽管它确实看起来有点 hacky)。
fun fetchBodyAsString(serverResponse: ServerResponse): String {
val DEFAULT_CONTEXT: ServerResponse.Context = object : ServerResponse.Context {
override fun messageWriters(): List<HttpMessageWriter<*>> {
return HandlerStrategies.withDefaults().messageWriters()
}
override fun viewResolvers(): List<ViewResolver> {
return Collections.emptyList()
}
}
// Only way I could figure out how to get the ServerResponse body was to have it write to an exchange
val request = MockServerHttpRequest.get("http://thisdoenstmatter.com").build()
val exchange = MockServerWebExchange.from(request)
serverResponse.writeTo(exchange, DEFAULT_CONTEXT).block()
val response = exchange.response
return response.bodyAsString.block()!!
}
基本上需要创建一个假MockServerWebExchange
的并对其进行ServerResponse
写入以将其翻译成一个MockServerHttpResponse
,您可以相当轻松地将响应体拉出。这绝对不是优雅的,但它有效。
另请注意,我没有测试上述函数本身,只是它编译。它应该可以工作,因为函数的内部代码正是我们正在使用的。
至于你的其他问题ServerResponse
,我不知道答案,但也很好奇!