Я заметил, что при тестировании Spring Boot getContentLength()
из MockHttpServletResponse
, так же как и 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);
Почему это было реализовано таким образом?