1 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
從您的控制器返回 201:正如您的斷言測(cè)試期望201使用created狀態(tài)一樣,但您的控制器返回 200(OK)。
@PostMapping("/items")
public ResponseEntity<?> addItem(@RequestBody Item item) {
Item savedItem = itemBusinessService.addAnItem(item);
return new ResponseEntity<>(savedItem, HttpStatus.CREATED);
}
或者修改您的測(cè)試以檢查狀態(tài) OK(200)。如果您不想斷言“位置”,請(qǐng)更新您的測(cè)試。
@Test
public void createItem() throws Exception {
RequestBuilder request = MockMvcRequestBuilders
.post("/items")
.accept(MediaType.APPLICATION_JSON)
.content("{\"id\":1,\"name\":\"Book\",\"price\":10,\"quantity\":100}")
.contentType(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(request)
.andExpect(status().isOk()).andReturn();
}
更新--允許位置標(biāo)頭作為響應(yīng)
如果您希望“位置”從標(biāo)題返回,請(qǐng)修改您的控制器和下面的測(cè)試用例以在標(biāo)題中檢查位置。
第 1 步:在您的控制器的 add item 方法中,添加位置 uri 并返回。
@PostMapping("/items")
public ResponseEntity<?> addItem(@RequestBody Item item) {
Item savedItem = businessService.addAnItem(item);
HttpHeaders httpHeaders = new HttpHeaders();
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.newInstance();
UriComponents uriComponents =
uriComponentsBuilder.path("/item/").buildAndExpand("/item/");
httpHeaders.setLocation(uriComponents.toUri());
return new ResponseEntity<>(savedItem, httpHeaders, HttpStatus.CREATED);
}
第 2 步:現(xiàn)在您的測(cè)試將"location"按照您的預(yù)期進(jìn)行斷言。
@Test
public void createItem() throws Exception {
RequestBuilder request = MockMvcRequestBuilders
.post("/items")
.accept(MediaType.APPLICATION_JSON)
.content("{\"id\":1,\"name\":\"Book\",\"price\":10,\"quantity\":100}")
.contentType(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(request)
.andExpect(status().isCreated())
.andExpect(header().string("location", containsString("/item/")))
.andReturn();
}
添加回答
舉報(bào)