【问题标题】:Unitest Create(Post) method using mockito使用 mockito 的 Unitest Create(Post) 方法
【发布时间】:2018-05-18 03:35:12
【问题描述】:

给定一个类SchedulerResource,它具有以下createSchedules 方法和该方法中使用的一堆常量,我如何使用mockito 为createSchedules 方法编写单元测试?

@PostMapping
public ResponseEntity<CustomResponse> createScheduler(@Valid @RequestBody SchedulerDTO schedulerDTO) {
    if(schedulerDTO != null)
    {
      schedulerService.saveScheduler(schedulerDTO);
      customResponse.setMessage("Schedule has been created!");
      return new ResponseEntity<>(customResponse ,HttpStatus.OK);
    } else {
      customResponse.setMessage("Not Create!");
      return new ResponseEntity<>(customResponse,HttpStatus.NOT_FOUND); 
    }
}

测试类:

@Test
public void createScheduler_Success() throws Exception {
    SchedulerDTO scheduler = new SchedulerDTO();
    Long sId = new Long(2);
    scheduler.setSchedulerId(sId);
    scheduler.setLinearChannelId((long)1);
    scheduler.setDurationMs((long) 5000);
    scheduler.setStatus(StatusEnum.NEW);
    scheduler.setStartTime("2018-03-01T05:55:25");
    scheduler.setEndTime("2018-03-01T05:57:25");
when(schedulerService.saveScheduler(scheduler)).thenReturn(scheduler);

    mockMvc.perform(post("/linear/api/1.0/schedules")
            .contentType(MediaType.APPLICATION_JSON)
            .content(asJsonString(scheduler)))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.message", is("Schedule has been created!")));        
}

所以没关系:

if(schedulerDTO != null)
{
  schedulerService.saveScheduler(schedulerDTO);
  customResponse.setMessage("Schedule has been created!");
  return new ResponseEntity<>(customResponse ,HttpStatus.OK);
}

但是呢:

else{
  customResponse.setMessage("Not Create!");
  return new ResponseEntity<>(customResponse,HttpStatus.NOT_FOUND);   
}

那么,我该如何写schedulerDTO == null的情况?

【问题讨论】:

    标签: java unit-testing mockito


    【解决方案1】:

    简单:传入 null,然后为 mockMvc 对象设置不同规范,例如 andExpect(status().isNotFound()(或类似的东西)。

    除此之外,您还可以使用诸如 verifyZeroInteractions() 之类的方法来确保没有调用到该模拟服务对象。

    从这个意义上说,它与测试其他情况并没有太大区别:您退后一步,查看 else 分支中发生的所有事情,然后思考如何观察/验证它们。

    【讨论】:

    • 并且响应状态为 NOT_FOUND
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2018-12-23
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多