Testing a Spring Multipart POST Request – 测试一个Spring多部分POST请求

最后修改: 2020年 6月 27日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

In this quick tutorial, we’re going to see how to test a multipart POST request in Spring using MockMvc.

在这个快速教程中,我们将看到如何使用MockMvc在Spring中测试一个多部分POST请求。

2. Maven Dependencies

2.Maven的依赖性

Before we begin, let’s add the latest JUnit and Spring test dependencies in our pom.xml:

在开始之前,让我们在我们的pom.xml中添加最新的JUnitSpring test依赖项。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.1.16.RELEASE</version>
    <scope>test</scope>
</dependency>

3. Testing a Multipart POST Request

3.测试一个多部分POST请求

Let’s create a simple endpoint in our REST controller:

让我们在我们的REST控制器中创建一个简单的端点。

@PostMapping(path = "/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
    return file.isEmpty() ?
      new ResponseEntity<String>(HttpStatus.NOT_FOUND) : new ResponseEntity<String>(HttpStatus.OK);
}

Here, the uploadFile method accepts a multipart POST request. In this method, we’re sending status code 200 if the file exists; otherwise, we’re sending status code 404.

这里,uploadFile方法接受了一个多部分的POST请求。在这个方法中,如果文件存在,我们将发送状态代码200;否则,我们将发送状态代码404。

Now, let’s test the above method using MockMvc.

现在,让我们用MockMvc测试上述方法。

First, let’s autowire the WebApplicationContext in our unit test class:

首先,让我们在单元测试类中自动连接WebApplicationContext

@Autowired
private WebApplicationContext webApplicationContext;

Now, let’s write a method to test the multipart POST request defined above:

现在,让我们写一个方法来测试上面定义的多部分POST请求。

@Test
public void whenFileUploaded_thenVerifyStatus() 
  throws Exception {
    MockMultipartFile file 
      = new MockMultipartFile(
        "file", 
        "hello.txt", 
        MediaType.TEXT_PLAIN_VALUE, 
        "Hello, World!".getBytes()
      );

    MockMvc mockMvc 
      = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    mockMvc.perform(multipart("/upload").file(file))
      .andExpect(status().isOk());
}

Here, we’re defining a hello.txt file using MockMultipartFile constructor, then we’re building the mockMvc object using the webApplicationContext object defined earlier.

在这里,我们使用hello.txt文件MockMultipartFile构造函数然后我们使用先前定义的webApplicationContext对象构建mockMvc对象。

We’ll use the MockMvc#perform method to call the REST Endpoint and pass it the file object. Finally, we’ll check the status code 200 to verify our test case.

我们将使用MockMvc#perform方法来调用REST端点并将文件对象传给它。最后,我们将检查状态代码200来验证我们的测试案例。

4. Conclusion

4.总结

In this article, we’ve seen how to test a Spring Multipart POST Request using MockMvc with the help of an example.

在这篇文章中,我们已经看到了如何在一个例子的帮助下使用MockMvc测试Spring的多部分POST请求。

As always the project is available over on GitHub.

该项目一如既往地在GitHub上提供超过