簡體   English   中英

如何在Spring Boot中測試文件上傳?

[英]How to test file upload in spring boot?

我已經實施了與此類似的休息服務。

UserController.java

@RestController
@RequestMapping(path = "/user")
public class UserController {

  private final UserService userService;

  @Autowired
  public UserController(UserService userService) {
    this.userService = userService;
  }

  @PostMapping(path = "/{id}/avatar")
  public void handleUpload(@PathVariable("id") int id, @RequestParam("file") MultipartFile file) {
    if (file == null) {
        throw new DashboardException("Please select a valid picture");
    }
    userService.setAvatar(id, file);
  }

}

現在,我嘗試使用以下方法測試其余端點:

UserControllerEndpointTest.java

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class UserControllerEndpointTest {

  private static final int userId = 42;
  private static final String urlPath = String.format("/user/%d/avatar", userId);

  private MockMvc mockMvc;

  @Autowired
  private WebApplicationContext webApplicationContext;
  @Autowired
  private UserController controller;
  private UserService service;

  @Before
  public void setUp() throws NoSuchFieldException, IllegalAccessException {
    mockMvc = webAppContextSetup(webApplicationContext).build();
    service = Mockito.mock(UserService.class);
    injectField(controller, "userService", service);
  }

  @Test
  public void successfullySetAvatar() throws Exception {
    final InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.png");
    final MockMultipartFile avatar = new MockMultipartFile("test.png", "test.png", "image/png", inputStream);

    doNothing().when(service).setAvatar(userId, avatar);

    final MvcResult result = mockMvc.perform(fileUpload(urlPath).file(avatar))
            .andExpect(status().isOk())
            .andReturn();

    verify(service).setAvatar(userId, avatar);
  }
}

這失敗,並顯示400 - Required request part 'file' is not present

我想念什么?

可能你需要改變
new MockMultipartFile("test.png", "test.png", "image/png", inputStream);

new MockMultipartFile("file", "test.png", "image/png", inputStream); 由於上傳的文件參數名稱為“ file”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM