使用MockMvc测试可选请求标头

时间:2019-07-18 03:43:26

标签: spring rest mockmvc request-headers

我有一个带有2个路径变量和2个请求标头(一个是必需的,一个是可选的)的rest控制器。我可以使用postman测试其余api,以获取数据,而无需提供可选的req标头。 但是当使用可选的req标头进行测试时,mockMvc失败。

我发现带有可选路径变量的嘲笑mvcvc问题,但找不到有关如何测试可选请求标头的任何信息。

我的控制器:

@GetMapping(value = "/{teacherId}/school/{schoolId}/test", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<? extends Object> getSupportDetails(@RequestHeader(userId) String userId,
@RequestHeader(value=classId, required=false) String classId,
@PathVariable String teacherId, @PathVariable String schoolId) {
            //some code
            }

我的考试班:

@Autowired
    private WebApplicationContext context;
    private MockMvc mockMvc;

 @Before public void setUp() { this.mockMvc =
      MockMvcBuilders.webAppContextSetup(this.context).build(); }   

@Test
public void getSupportWithoutClassId() throws Exception {   this.mockMvc.perform(get("/{teacherId}/school/{schoolId}/test", "113", "105")
        .header("userId", "*")) 
        .andDo(MockMvcResultHandlers.print())
        .andExpect(status().is(200));

    }

预期结果应为状态200。 但是,如果我没有在header()中提供可选的标题,则会出现错误:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Header value must not be null

但是,如果我同时设置了可选标头和必需标头,我将得到正确的响应。

我该如何使用模拟Mvc测试这种情况?

0 个答案:

没有答案