junit java.lang.AssertionError:预期状态:< 200>但是:< 201>

4sup72z8  于 2023-10-20  发布在  Java
关注(0)|答案(1)|浏览(132)

你好,我正在尝试在我的控制器中实现junit。但我得到的是201而不是200。
下面是我的控制器

@RestController
@RequestMapping(value = "/treat")
public class TreatController {

  private final TreatService treatService;

@Autowired
  public TreatController(TreatService treatService){
    this.treatService = treatService;
  }

@PostMapping
  public ResponseEntity<CommonResponse> addNew(
      @RequestBody Treat treat) throws RecordNotFoundException{
    CommonResponse response = new CommonResponse();
    response.setStatus(CommonConstants.OK);
    response.setData(treatService.save(treat));
    return new ResponseEntity<>(response, HttpStatus.CREATED);
  }
}

接下来是我的Junit测试:

@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(TreatController.class)
public class TreatControllerTest {

  private RecordNotFoundException recordException = new RecordNotFoundException("");

  private final String title = "{\"title\" : \"title\"}";

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private TreatService treatService;

@Test
  public void addNew() throws Exception{
    Treatment treatment = new Treatment();

    given(treatmentService.save(
        Mockito.any(Treat.class))).willReturn(treat);
    mockMvc.perform(post("/treats")
    .content(title)
    .accept(MediaType.APPLICATION_JSON_VALUE)
    .contentType(MediaType.APPLICATION_JSON_VALUE))

    .andDo(print())
    .andExpect(status().isOk());

    Mockito.verify(treatService).save(Mockito.any(Treat.class));
  }
}

有什么我错过的吗我不使用Json。我把它插进去是因为它能用。

a7qyws3x

a7qyws3x1#

这就是你所返回的。

return new ResponseEntity<>(response, HttpStatus.CREATED);

HttpStatus.CREATED返回201,表示请求已创建资源
在你的测试用例中,你期望OK(200).andExpect(status().isOk());
根据HTTP1.1/ specs,Post请求应该总是导致创建资源。所以从那里返回201是有意义的。您所需要做的就是将测试用例Assert预期值更改为HTTPStatus.CREATED。

相关问题