檔案上傳的單元測試怎麼寫?
阿新 • • 發佈:2021-01-11
早上有個群友問了一個不錯的問題:檔案上傳的單元測試怎麼寫?後面也針對後端開發要不要學一下單元測試的話題聊了聊,個人是非常建議後端開發能夠學一下單元測試的。所以,今天特地拿出來寫一篇說說,並不是因為這有多難寫,而是作為出色的後端開發人員,單元測試如果你能考慮周到,那麼從程式碼結構,程式質量上都會有很大的提升。而實際開發過程中,很少有開發人員會特別關注這個方面。
言歸正傳,下面我們具體說說當碰到需要上傳檔案的介面,我們要如何寫單元測試!
先來回憶一下,普通介面的單元測試我們是如何寫的?看看我們入門例子中的單元測試:
@SpringBootTest public class Chapter11ApplicationTests { private MockMvc mvc; @Before public void setUp() { mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build(); } @Test public void getHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("Hello World"))); } }
這裡我們所用到的核心是MockMvc工具,通過模擬http請求的提交併指定相關的期望返回來完成。
對於檔案上傳介面,本質上還是http請求的處理,所以MockMvc依然逃不掉,就是上傳內容發生了改變,我們只需要去找一下檔案上傳的模擬物件是哪個,就可以輕鬆完成這個任務。
具體寫法如下:
@SpringBootTest(classes = Chapter43Application.class) public class FileTest { @Autowired protected WebApplicationContext context; protected MockMvc mvc; @BeforeEach public void setUp() { mvc = MockMvcBuilders.webAppContextSetup(context).build(); } @Test public void uploadFile() throws Exception { MockMultipartFile file = new MockMultipartFile( "file", "hello.txt", MediaType.TEXT_PLAIN_VALUE, "Hello, World!".getBytes() ); final MvcResult result = mvc.perform( MockMvcRequestBuilders .multipart("/upload") .file(file)) .andDo(print()) .andExpect(status().isOk()) .andReturn(); } }
可以看到MockMvc的測試主體是不變的,無非就是請求型別和請求內容發生了改變。
今天的這篇很水,但是否會編寫單元測試以及能否寫好單元測試,是很難看出一個後端開發水平的。所以,我是非常推薦大家能夠在編寫業務實現的時候,先考慮一下自己的單元測試是否方便寫,甚至先定義好介面,並寫好單元測試,再去寫實現(傳說中的測試驅動開發)。
最近的分享到這裡結束,有更多想法可來公眾號、星球或社群交流!
更多本系列免費教程連載「點選進入彙總目錄」
程式碼示例
本文的相關例子可以檢視下面倉庫中的chapter4-3
目錄:
- Github:https://github.com/dyc87112/SpringBoot-Learning/
- Gitee:https://gitee.com/didispace/SpringBoot-Learning/
如果您覺得本文不錯,歡迎Star
支援,您的關注是我堅持的動力!
歡迎關注我的公眾號:程式猿DD,獲得獨家整理的免費學習資源助力你的Java學習之路!另每週贈書不停哦~