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
我在 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