23

我正在测试我的 MVC 服务,spring-test-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.

4

3 回答 3

30

也许你的意思是这样的。

    MvcResult mvcResult = mvc.perform(get("/")).andReturn();
    String headerValue = mvcResult.getResponse().getHeader("headerName");
于 2013-09-30T14:17:48.603 回答
3

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

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

assertThat(maxAge, is(both(greaterThanOrEqualTo(3500)).and(lessThanOrEqualTo(3700))));
于 2013-10-24T19:49:42.877 回答
2

最好的方法是MockMvcResultMatchers.header()弹簧测试

mockMvc.perform(MockMvcRequestBuilders.get("/api"))
.andExpect(MockMvcResultMatchers.header()
.stringValues("count", "150"));
于 2021-06-09T08:56:53.713 回答