【问题标题】:What is the purpose of mockMvc .contentType(MediaType.APPLICATION_JSON)?mockMvc .contentType(MediaType.APPLICATION_JSON) 的目的是什么?
【发布时间】:2021-08-22 20:21:11
【问题描述】:

我不明白这种方法的意义,也找不到任何关于它的信息。使用它的原因是什么,特别是对于下面示例中的 void 方法?我试过在我的测试中删除它,似乎一切都是一样的。 测试

   @Test
public void deletePatientById_success() throws Exception {
    Mockito.when(patientRecordRepository.findById(RECORD_2.getPatientId())).thenReturn(Optional.of(RECORD_2));

    mockMvc.perform(MockMvcRequestBuilders
            .delete("/patient/2")
            .contentType(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk());
}

要测试的控制器

    @DeleteMapping(value = "{patientId}")
public void deletePatientById(@PathVariable(value = "patientId") Long patientId) throws NotFoundException {
    if (patientRecordRepository.findById(patientId).isEmpty()) {
        throw new NotFoundException("Patient with ID " + patientId + " does not exist.");
    }
    patientRecordRepository.deleteById(patientId);
}

【问题讨论】:

    标签: java spring mockito


    【解决方案1】:

    contentType 方法不属于mockMvc 类,而是属于MockHttpServletRequestBuilder 类,它将请求的“Content-Type”标头设置为特定类型(在这种情况下,您通知端点您的请求的请求正文格式为 JSON)。

    【讨论】:

    • 谢谢,所以如果我测试删除操作,没有必要设置内容类型,因为我的正文中没有内容。对吗?
    • @Henry_Muller 欢迎您。您是绝对正确的,因为在您的删除控制器中,唯一的读取值是查询字符串中的 id(没有读取正文内容),因此没有理由使用它。 content-type 头只是对端点的指示,但端点可以忽略它。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2020-11-26
      • 1970-01-01
      • 2011-03-28
      • 2021-04-01
      • 2011-03-05
      • 2020-06-13
      • 2012-03-04
      相关资源
      最近更新 更多