有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用springtestmvc对http头进行java自定义测试

我正在用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模式


共 (3) 个答案

  1. # 1 楼答案

    要添加更详细的内容来说明Allow的答案:如果您在代码中还可以访问JAX-RS实现,那么可以使用CacheControl对象进行非常明确的测试(例如使用hamcrest matchers):

    int maxAge = CacheControl
                    .valueOf(mvcResult.getResponse().getHeader("Cache-Control"))
                    .getMaxAge();
    
    assertThat(maxAge, is(both(greaterThanOrEqualTo(3500)).and(lessThanOrEqualTo(3700))));
    
  2. # 2 楼答案

    也许你的意思是这样的

        MvcResult mvcResult = mvc.perform(get("/")).andReturn();
        String headerValue = mvcResult.getResponse().getHeader("headerName");
    
  3. # 3 楼答案

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

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