Junit 测试用例失败 400 错误请求

Junit test case fail 400 bad request

我在 spring data jpa 应用程序中使用 junit 进行单元测试。我正在尝试为控制器 class unclaimedRoomAssign() 编写 junit 测试用例。我正在使用 mockito 创建模拟对象。

我尝试编写如下测试,但收到测试失败 400 错误请求。谁能告诉我我在测试用例中遗漏了什么

RoomDepartmentMappingController class

   public class RoomDepartmentMappingController {

    @Autowired
    RoomDepartmentMappingService rdmService;

    @PostMapping("/assignUnclaimedRooms")
    public ResponseEntity<String> unclaimedRoomAssign(@NotNull  @RequestParam(name="nDeptId", required= true) Integer nDeptId,
                                                      @NotNull  @RequestParam(name="nRoomId" , required = true) Integer nRoomId,
                                                      @Nullable @RequestParam(name="nSubDeptId" , required = false) Integer nSubDeptId){

        return ResponseEntity.ok(rdmService.unclaimedRoomAssign(nDeptId, nRoomId,nSubDeptId ));

}

TestRoomDepartmentMappingControllerclass

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = RoomDepartmentMappingController.class)
@WebMvcTest(value = RoomDepartmentMappingController.class)
public class TestRoomDepartmentMappingController {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    RoomDepartmentMappingService roomDepartmentMappingService;

    @Value("${InstituteIdentifier}")
    String instituteIdentifier;

    @Test
    public void UnclaimedRoomAssignTest() throws Exception {

        String stringUrl="/spacestudy/"+ instituteIdentifier+"/asset/room/assignUnclaimedRooms";

        String stringResult = "Room assign sucessfully";        

        Department dep = new Department();
        dep.setnDeptId(1);


        RoomDepartmentMapping rdmObj = new RoomDepartmentMapping();     
                              rdmObj.setnRoomAllocationId(587050);
                              rdmObj.setnDeptId(1);
                              rdmObj.setnRoomId(1215783);

        String inputInJson = mapToJson(rdmObj);     

        Mockito.when(roomDepartmentMappingService.unclaimedRoomAssign(1, 1215783, 0)).thenReturn(stringResult);         

        mockMvc.perform(post(stringUrl)
               .accept(MediaType.APPLICATION_JSON)
               .content(inputInJson)
               .contentType(MediaType.APPLICATION_JSON))
               .andExpect(status().isOk());


     Mockito.verify(roomDepartmentMappingService).unclaimedRoomAssign(1, 1215783, 0);
    }

    private String mapToJson(Object object) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(object);

    }
}

控制台

 MockHttpServletRequest:
          HTTP Method = POST
          Request URI = /spacestudy/vcufy2010/asset/room/assignUnclaimedRooms
           Parameters = {}
              Headers = {Content-Type=[application/json], Accept=[application/json]}
                 Body = <no character encoding set>
        Session Attrs = {}

    Handler:
                 Type = com.spacestudy.controller.RoomDepartmentMappingController
               Method = public org.springframework.http.ResponseEntity<java.lang.String> com.spacestudy.controller.RoomDepartmentMappingController.unclaimedRoomAssign(java.lang.Integer,java.lang.Integer,java.lang.Integer)

    Resolved Exception:
                 Type = org.springframework.web.bind.MissingServletRequestParameterException


    MockHttpServletResponse:
               Status = 400
        Error message = Required Integer parameter 'nDeptId' is not present

您有所需的 RequestParams:

@NotNull  @RequestParam(name="nDeptId", required= true) Integer nDeptId,
@NotNull  @RequestParam(name="nRoomId" , required = true) Integer nRoomId,

但是您的请求中没有它们URL

/spacestudy/vcufy2010/asset/room/assignUnclaimedRooms

这应该是这样的

/spacestudy/vcufy2010/asset/room/assignUnclaimedRooms?nDeptId=x&nRoomId=x

其中 x 应该是正确的 ID