의 인스턴스가 있다고 가정합니다 o.s.w.reactive.function.server.ServerResponse
.
본문의 내용을 가져오는 적절한 방법, 즉 fetchBodyAsString
기능을 구현하는 방법은 무엇입니까?
test(){
ServerResponse response = getResponseFromService("mock data");
String body = fetchBodyAsString(response);
assertEquals("hello", body);
}
Response body이 아닌 ServerResponse
모든 항목( )에 대한 메소드 가 있는 이유에 대해 조금 더 자세히 설명해 주시겠습니까? cookies(), headers(), statusCode()
방법으로 몸을 얻는 방법이 있어야 한다고 생각합니다 writeTo()
. 비록 그것을 사용하는 방법은 절대적으로 모호합니다.
단위 테스트 목적으로 비슷한 것을 파고 들었고 아래 코드를 함께 꿰매었습니다. Kotlin에 있지만 Java로 번역하고 문제를 해결하는 것이 상대적으로 쉬워야 합니다.
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()
}
}
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()!!
}
기본적으로 가짜를 만들고 꽤 고통 없이 Response body을 꺼낼 수 있는 것으로 변환하기 위해 작성해야 했습니다 MockServerWebExchange
. 이것은 확실히 우아하지는 않지만 작동합니다.ServerResponse
MockServerHttpResponse
또한 위의 함수 자체를 테스트하지 않았으며 단지 컴파일된다는 점에 유의하십시오. 함수의 내부 코드가 정확히 우리가 사용하는 것이기 때문에 작동해야 합니다.
에 대한 귀하의 다른 질문에 대해서는 ServerResponse
답을 모르지만 그것에 대해서도 궁금합니다!