使用 spring-test-mvc 自定义测试 http 标头
Posted
技术标签:
【中文标题】使用 spring-test-mvc 自定义测试 http 标头【英文标题】:Custom test of http header with spring-test-mvc 【发布时间】:2013-10-06 10:06:27 【问题描述】:我正在使用 spring-test-mvc
测试我的 MVC 服务,我使用了类似的东西:
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("<my-url>")).andExpect(content().bytes(expectedBytes)).andExpect(content().type("image/png"))
.andExpect(header().string("cache-control", "max-age=3600"));
效果很好。
现在我将缓存图像更改为在特定范围内随机。例如,可以用3500-3700
代替3600
。我试图弄清楚如何获取标头值并对其进行一些测试,而不是使用andExpect
的这种模式。
【问题讨论】:
【参考方案1】:也许你的意思是这样的。
MvcResult mvcResult = mvc.perform(get("/")).andReturn();
String headerValue = mvcResult.getResponse().getHeader("headerName");
【讨论】:
【参考方案2】:为 Admit 的回答添加更多细节:如果您还可以访问代码中的 JAX-RS 实现,则可以使用 CacheControl 对象进行非常明确的测试(例如使用 hamcrest 匹配器):
int maxAge = CacheControl
.valueOf(mvcResult.getResponse().getHeader("Cache-Control"))
.getMaxAge();
assertThat(maxAge, is(both(greaterThanOrEqualTo(3500)).and(lessThanOrEqualTo(3700))));
【讨论】:
【参考方案3】:最好的办法是MockMvcResultMatchers.header()
的spring-test
mockMvc.perform(MockMvcRequestBuilders.get("/api"))
.andExpect(MockMvcResultMatchers.header()
.stringValues("count", "150"));
【讨论】:
以上是关于使用 spring-test-mvc 自定义测试 http 标头的主要内容,如果未能解决你的问题,请参考以下文章