gpt4 book ai didi

java - Spring Boot 测试 - MockHttpServletResponse getContentLength 返回 0 尽管有内容

转载 作者:行者123 更新时间:2023-12-05 07:30:58 24 4
gpt4 key购买 nike

我注意到在 Spring Boot 测试中,MockHttpServletResponsegetContentLength()javax.servlet.http.HttpServletResponse 相同,只是读取请求头"Content-Length"来判断返回值,但是如果在我的测试中我没有设置header,它返回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);

为什么要这样实现?

最佳答案

可能是这种情况,在类中执行的值 HttpHeaders.CONTENT_LENGTH 的整数转换会导致此行为。这是设置 contentLength 值的代码(启动并重置为 0):

else if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
setContentLength(value instanceof Number ? ((Number) value).intValue() :
Integer.parseInt(value.toString()));
return true;
}

也许 getContentLengthLong 可以解决您的问题?

检查实现:https://github.com/spring-projects/spring-framework/blob/master/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java

关于java - Spring Boot 测试 - MockHttpServletResponse getContentLength 返回 0 尽管有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52005034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com