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

2022-09-01 22:59:18

我正在测试我的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"));

这很好。

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


答案 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))));

推荐