文件上傳的單元測試怎麼寫?

早上有個羣友問了一個不錯的問題:文件上傳的單元測試怎麼寫?後面也針對後端開發要不要學一下單元測試的話題聊了聊,個人是非常建議後端開發能夠學一下單元測試的。所以,今天特地拿出來寫一篇說說,並不是因爲這有多難寫,而是作爲出色的後端開發人員,單元測試如果你能考慮周到,那麼從代碼結構,程序質量上都會有很大的提升。而實際開發過程中,很少有開發人員會特別關注這個方面。

言歸正傳,下面我們具體說說當碰到需要上傳文件的接口,我們要如何寫單元測試!

先來回憶一下,普通接口的單元測試我們是如何寫的?看看我們入門例子中的單元測試:

@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目錄:

如果您覺得本文不錯,歡迎Star支持,您的關注是我堅持的動力!

歡迎關注我的公衆號:程序猿DD,獲得獨家整理的免費學習資源助力你的Java學習之路!另每週贈書不停哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章