在REST控制器上测试发布多部分/表单数据请求

时间:2019-06-19 07:18:05

标签: spring spring-boot

我已经编写了一个典型的spring boot应用程序,现在我想对该应用程序添加集成测试。

我有以下控制器并进行了测试:

控制器:

@RestController
public class PictureController {
    @RequestMapping(value = "/uploadpicture", method = RequestMethod.POST)
    public ResponseEntity<VehicleRegistrationData> uploadPicturePost(@RequestPart("userId") String userId, @RequestPart("file") MultipartFile file) {
        try {
            return ResponseEntity.ok(sPicture.saveAndParsePicture(userId, file));
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }
}

测试:

    @Test
public void authorizedGetRequest() throws Exception {
    File data = ResourceUtils.getFile(testImageResource);
    byte[] bytes = FileUtils.readFileToByteArray(data);


    ObjectMapper objectMapper = new ObjectMapper();
    MockMultipartFile file = new MockMultipartFile("file", "test.jpg", MediaType.IMAGE_JPEG_VALUE, bytes);

    MockMultipartFile userId =
            new MockMultipartFile("userId",
                    "userId",
                    MediaType.MULTIPART_FORM_DATA_VALUE,
                    objectMapper.writeValueAsString("123456").getBytes()
            );
    this.mockMvc.perform(multipart("/uploadPicture")
            .file(userId)
            .file(file)
            .header(API_KEY_HEADER, API_KEY)).andExpect(status().isOk());
}

在Android上使用OkHttp3客户端无缝测试控制器可以正常工作,但是我不知道如何在MockMvc上执行该请求

我希望200是一种状态代码,但是会得到404,因为我认为该格式对于该控制器而言不是正确的

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

必须是错字。

在您的控制器中,您声称请求URL为/uploadpicture,但您访问了/uploadPicture进行单元测试。