簡體   English   中英

Mockmvc用於接受Multipart文件的DELETE方法

[英]Mockmvc for a DELETE method that accepts a Multipart file

我正在嘗試為具有DELETE方法的控制器編寫單元測試,該方法應該接受File和text param。

我知道我可以像這樣做一個簡單的刪除:

    MvcResult result = mockMvc.perform(MockMvcRequestBuilders.delete(
            "/deletecat/catname/Oscar"))
            .andExpect(status().isOK)
            .andReturn();

我可以像這樣對多部分文件進行POST:

MockMultipartFile multipartFile = new MockMultipartFile("file", new FileInputStream(TEST_RESOURCES_FOLDER + "Cats.csv"));
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.multipart("/uploadcats")
   .file(multipartFile)
   .param("ownerName", "Austin Powers"))
   .andExpect(status().isOk())
   .andReturn();

但是,當我嘗試將它們組合在一起並寫下時:

 MvcResult result = mockMvc.perform(
            MockMvcRequestBuilders.delete(
                    "/deletecats", 
                    multipartFile, "Austin Powers"))
            .andExpect(status().isOk())
            .andReturn();

我收到以下錯誤: “當前請求不是多部分請求”

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Current request is not a multipart request

HTTP協議是否可能不支持對Multipart文件執行DELETE?

看來MockMultipartHttpServletRequestBuilder僅支持POST請求,表示HTTP方法的常量在構造函數中進行了硬編碼 這很奇怪,因為至少POSTPUT通常與multipart一起使用。

恐怕在當前版本中,您將不得不派生該類並自行更改HTTP方法。

我個人會說從API設計角度來看這是錯誤的。

REST大量使用資源,因此使用它們的專用標識符,例如

get / entities獲取實體列表get / entities / {entity-id}獲取單個實體

我將申請刪除的相同模式:按標識符處理資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM