我注意到在Spring Boot测试中,getContentLength()
的{{1}}与MockHttpServletResponse
一样,仅读取请求标头javax.servlet.http.HttpServletResponse
来确定返回值,但是如果在我的测试中,我没有设置标题,它返回0,而忽略是否有任何内容。
"Content-Length"
它是标准的,但是有点令人困惑。
要通过测试,我必须这样做:
@Then("xxxxx returns {string} and status code {int}")
public void xxxxx_returns_and_status_code(String result, Integer code) throws Exception {
assertThat(this.results.getResponse().getContentType()).isEqualTo(MediaType.APPLICATION_JSON_UTF8_VALUE); // <-- pass
assertThat(this.results.getResponse().getStatus()).isEqualTo(code); // <-- pass
System.out.println(this.results.getResponse().getContentLength()); // 0???
System.out.println(this.results.getResponse().getContentAsString()); // the correct response
assertThat(this.results.getResponse().getContentLength()).isNotEqualTo(0); // not pass, confusing
getContentAsString()// pass
}
为什么以这种方式实施?
答案 0 :(得分:0)
可能是这种情况,在类中执行的值HttpHeaders.CONTENT_LENGTH的Integer转换导致此行为。这是设置contentLength的值的代码(已初始化并将其重置为0):
else if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
setContentLength(value instanceof Number ? ((Number) value).intValue() :
Integer.parseInt(value.toString()));
return true;
}
也许getContentLengthLong将帮助您解决问题?