使用spring-test-mvc自定义测试http标头

时间:2013-09-30 13:51:49

标签: java spring spring-mvc spring-test-mvc

我正在使用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"));

哪种方法很好。

现在我将缓存图像更改为在特定范围内随机。例如,代替3600,它可能是3500-3700。我试图找出如何获取标头值并对其进行一些测试,而不是使用andExpect的这种模式。

3 个答案:

答案 0 :(得分:16)

也许你的意思是这样的。

    MvcResult mvcResult = mvc.perform(get("/")).andReturn();
    String headerValue = mvcResult.getResponse().getHeader("headerName");

答案 1 :(得分:3)

要向Admit的答案添加更多细节:如果您还可以在代码中访问JAX-RS实现,则可以使用CacheControl对象进行非常明确的测试(使用hamcrest匹配器的示例):

int maxAge = CacheControl
                .valueOf(mvcResult.getResponse().getHeader("Cache-Control"))
                .getMaxAge();

assertThat(maxAge, is(both(greaterThanOrEqualTo(3500)).and(lessThanOrEqualTo(3700))));

答案 2 :(得分:1)

最好的方法是MockMvcResultMatchers.header() spring-test

mockMvc.perform(MockMvcRequestBuilders.get("/api"))
.andExpect(MockMvcResultMatchers.header()
.stringValues("count", "150"));