PUT方法的集成测试返回400错误请求



我一直在尝试为PUT方法编写测试,但我似乎不明白为什么实际结果代码是400 Bad Request而不是200 Ok。这是我的测试:

@WebMvcTest(controllers = AgencyController.class)
public class AgencyControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private AgencyService agencyService;
@MockBean
private AgencyMapper agencyMapper;
@Test
@DisplayName("Update agency-happy")
public void updateAgency() throws Exception {
Agency agency = new Agency();
agency.setId(1);
agency.setName("Agency");
agency.setEmail("agency@gmail.com");
doReturn(Collections.singletonList(agency)).when(agencyService).getAll();
agency.setName("Updated name");
agency.setEmail("updated@gmail.com");
when(agencyService.updatePartialDto(agency, agency.getId())).thenReturn(agency);
mockMvc.perform(put("/agencies/editAgency/" + agency.getId())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(MockMvcResultHandlers.print());
}
}

这是我在代理控制器中的方法:

@PutMapping("/editAgency/{id}")
public Agency updatePartial(@RequestBody AgencyDto agencyDto, @PathVariable Integer id) {
Agency mappedAgency = mapper.mapToEntity(agencyDto);
return service.updatePartialDto(mappedAgency, id);
}

我试过调试测试,预期与实际的回报率是200比400。测试似乎很好,直到达到mockMvc.perform()。当进入函数时,它最终达到了方法

public int getStatus() {
return this.status;
}

从CCD_ 2返回400。服务中的getAll()方法只是对JpaRepository的findAll()方法的调用。我做错了什么?我也搜索了一些例子,但没有找到任何相关的东西。错误:

at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:59)
at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:122)
at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:627)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:212)
at com.project.controller.AgencyControllerTest.updateAgency(AgencyControllerTest.java:155)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)

在对MockMvc执行请求后,尝试添加以下ResultHandler。然后,它将打印出更多的细节,其中包括导致400:的异常类型

mockMvc.perform(put("/agencies/editAgency/" + agency.getId())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(MockMvcResultHandlers.print());

这些信息应该能让你对根本原因有更多的了解。

最新更新