【发布时间】:2018-08-24 12:57:09
【问题描述】:
我注意到在Spring Boot测试中,MockHttpServletResponse的getContentLength(),和javax.servlet.http.HttpServletResponse一样,只读取请求头"Content-Length"来确定返回值,但是如果在我的测试中我没有设置头,它返回0,忽略是否有任何内容。
@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
}
这是标准的,但有点令人困惑。
要让测试通过,我必须这样做:
assertThat(this.results.getResponse().getContentAsString().length()).isNotEqualTo(0);
为什么要这样实现?
【问题讨论】:
标签: java httpresponse servlet-3.0 spring-boot-test