第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何將@WebMvcTest 用于單元測(cè)試 POST 方法?

如何將@WebMvcTest 用于單元測(cè)試 POST 方法?

不負(fù)相思意 2021-11-03 15:20:41
我正在使用 Spring Boot 和 Mockito 運(yùn)行單元測(cè)試,我正在測(cè)試 RESTful 服務(wù)。當(dāng)我嘗試測(cè)試 GET 方法時(shí),它成功運(yùn)行,但是當(dāng)我嘗試測(cè)試 POST 方法時(shí),它失敗了。我應(yīng)該怎么做才能解決這個(gè)問(wèn)題?提前致謝!這是 REST 控制器的代碼:package com.dgs.restfultesting.controller;import java.net.URI;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.servlet.support.ServletUriComponentsBuilder;import com.dgs.restfultesting.business.ItemBusinessService;import com.dgs.restfultesting.model.Item;@RestControllerpublic class ItemController {    @Autowired    private ItemBusinessService businessService;    @GetMapping("/all-items-from-database")    public List<Item> retrieveAllItems() {        return businessService.retrieveAllItems();     }    @PostMapping("/items")    public Item addItem(@RequestBody Item item) {        Item savedItem = businessService.addAnItem(item);         return savedItem;    }}業(yè)務(wù)層:package com.dgs.restfultesting.business;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.dgs.restfultesting.data.ItemRepository;import com.dgs.restfultesting.model.Item;@Componentpublic class ItemBusinessService {    @Autowired    private ItemRepository repository;    public Item retrieveHardcodedItem() {        return new Item(1, "Book", 10, 100);     }    public List<Item> retrieveAllItems() {        List<Item> items = repository.findAll();         for (Item item : items) {            item.setValue(item.getPrice() * item.getQuantity());          }        return items;      }    public Item addAnItem(Item item) {        return repository.save(item);     }}
查看完整描述

1 回答

?
MMMHUHU

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();

    }


查看完整回答
反對(duì) 回復(fù) 2021-11-03
  • 1 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)