文件上传的单元测试怎么写?

发表于:2021-6-09 09:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:苦月亮    来源:博客园

  有个群友问了一个不错的问题:文件上传的单元测试怎么写?后面也针对后端开发要不要学一下单元测试的话题聊了聊,个人是非常建议后端开发能够学一下单元测试的。所以,今天特地拿出来写一篇说说,并不是因为这有多难写,而是作为出色的后端开发人员,单元测试如果你能考虑周到,那么从代码结构,程序质量上都会有很大的提升。而实际开发过程中,很少有开发人员会特别关注这个方面。
  言归正传,下面我们具体说说当碰到需要上传文件的接口,我们要如何写单元测试!
  先来回忆一下,普通接口的单元测试我们是如何写的?看看我们入门例子中的单元测试:
  @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的测试主体是不变的,无非就是请求类型和请求内容发生了改变。
  是否会编写单元测试以及能否写好单元测试,是很难看出一个后端开发水平的。所以,我是非常推荐大家能够在编写业务实现的时候,先考虑一下自己的单元测试是否方便写,甚至先定义好接口,并写好单元测试,再去写实现(传说中的测试驱动开发)。

   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号