【问题标题】:Custom test of http header with spring-test-mvc使用 spring-test-mvc 自定义测试 http 标头
【发布时间】: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 的这种模式。

【问题讨论】:

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


    【解决方案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"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-21
          • 2013-05-16
          • 2013-03-06
          • 2017-07-17
          • 1970-01-01
          相关资源
          最近更新 更多