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

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

早上有个群友问了一个不错的问题:文件上传的单元测试怎么写?后面也针对后端开发要不要学一下单元测试的话题聊了聊,个人是非常建议后端开发能够学一下单元测试的。所以,今天特地拿出来写一篇说说,并不是因为这有多难写,而是作为出色的后端开发人员,单元测试如果你能考虑周到,那么从代码结构,程序质量上都会有很大的提升。而实际开发过程中,很少有开发人员会特别关注这个方面。

言归正传,下面我们具体说说当碰到需要上传文件的接口,我们要如何写单元测试!

先来回忆一下,普通接口的单元测试我们是如何写的?看看我们入门例子中的单元测试:

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

目录
相关文章
|
安全 Java 程序员
Web安全性测试系列(三)文件上传漏洞核心原理详解
Web安全性测试系列(三)文件上传漏洞核心原理详解
143 0
|
5月前
|
JSON 数据格式
postman 实用教程(含带 token 访问需登录权限的接口、测试文件上传接口、测试文件下载接口)
postman 实用教程(含带 token 访问需登录权限的接口、测试文件上传接口、测试文件下载接口)
740 0
|
存储 测试技术
接口自动化测试——文件上传/下载
轻松搞定文件上传接口和文件下载接口。
310 0
接口自动化测试——文件上传/下载
|
分布式计算 Hadoop API
Hadoop中HDFS的API操作、HDFS文件上传(测试参数优先级)、copyFromLocalFile参数解读、HDFS文件下载、文件更名和移动、删除文件和目录、文件详情查看、文件和文件夹判断
Hadoop中HDFS的API操作、HDFS文件上传(测试参数优先级)、copyFromLocalFile参数解读、HDFS文件下载、文件更名和移动、删除文件和目录、文件详情查看、文件和文件夹判断
Hadoop中HDFS的API操作、HDFS文件上传(测试参数优先级)、copyFromLocalFile参数解读、HDFS文件下载、文件更名和移动、删除文件和目录、文件详情查看、文件和文件夹判断
|
开发框架 安全 前端开发
2022渗透测试-文件上传漏洞的详细讲解
2022渗透测试-文件上传漏洞的详细讲解
2022渗透测试-文件上传漏洞的详细讲解
|
Java 测试技术 网络架构
技术分享 | 接口自动化测试中,文件上传该如何测试?
在服务端自动化测试过程中,文件上传类型的接口对应的请求头中的 content-type 为 multipart/form-data; boundary=..
技术分享 | 接口自动化测试中,文件上传该如何测试?
|
JavaScript 前端开发 Java
技术分享 | web自动化测试-文件上传与弹框处理
在有些场景中,需要上传文件,而 Selenium 无法定位到弹出的文件框,以及网页弹出的提醒。这些都是需要特殊的方式来处理。
|
JavaScript 前端开发 Java
技术分享 | web自动化测试-文件上传与弹框处理
技术分享 | web自动化测试-文件上传与弹框处理
|
JSON 测试技术 数据格式
python接口自动化测试 - requests库的post请求进行文件上传
python接口自动化测试 - requests库的post请求进行文件上传
820 0
python接口自动化测试 - requests库的post请求进行文件上传
|
安全 前端开发 JavaScript
渗透测试 对文件上传安全检测与webshell分析
前段时间我们SINE安全收到客户的渗透测试服务委托,在这之前,客户网站受到攻击,数据被篡改,要求我们对网站进行全面的渗透测试,包括漏洞的检测与测试,逻辑漏洞.垂直水平越权漏洞,文件上传漏洞.等等服务项目,在进行安全测试之前,我们对客户的网站大体的了解了一下,整个平台网站,包括APP,安卓端,IOS端都采用的JSP+oracle数据库架构开发,前端使用VUE,服务器是linux centos系统.下面我们将渗透测试过程里,对文件上传漏洞的检测与webshell的分析进行记录,希望更多的人了解什么是渗透测试.
284 0
渗透测试 对文件上传安全检测与webshell分析