java - 如何使用 junit 测试带有 MultiPart 参数的 REST API?

标签 java rest junit multipart

我需要一些测试 POST REST 功能的帮助,

我得到了这个 REST 函数头:

@RequestMapping(value = "/import", method = RequestMethod.POST)
    public @ResponseBody
    HistoricalDataImportResponse importHistoricalDataFile(String fileFormat, @RequestParam("file") MultipartFile stream)  {

我尝试使用 JUnit 进行以下测试:

@Test
public void testHistoricalDataImport() throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    FileItem fileItem = new DiskFileItem(null, null, false, null, 0, null);
    MultipartFile eventRequest = new CommonsMultipartFile(null);
    String body = mapper.writeValueAsString(eventRequest);

    //when
    MvcResult result = this.mockMvc.perform(post("/historicaldata/import").contentType(MediaType.MULTIPART_FORM_DATA).content(body))
            .andExpect(status().isOk())
            .andReturn();
}

运行测试时fileItem为空,我需要如何将一些文件传递给我的REST函数?

最佳答案

通过查看代码,您似乎想要从文件系统读取文件,然后使用 objectMapper 将其转换为 JSON。这是编写单元测试的错误方法,您不能从单元测试访问文件系统,您的测试应该单独运行。使用下面的代码

  @Test
  public void testHistoricalDataImport() throws Exception {
    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import")
            .file("filename","some data as file text".getBytes());

    MvcResult result = mockMvc.perform(requestBuilder).andExpect(status().isOk()).andReturn();
  }

关于java - 如何使用 junit 测试带有 MultiPart 参数的 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136634/

相关文章:

java - 使用 JAXRS 将 XML 编码为 Restful 服务的 JAVA 对象

javascript - 当我使用 async/await 时,为什么会收到多个响应?

javascript - Angular.js 和显示 Rest JSON

java - 如何使用递归回溯 (Java) 找到特定迷宫的解决方案?

java - 如何在调用 servlet/加载页面后立即执行方法/事件

java - 使用信号量作为唯一同步原语的倒计时锁存器

java - 如何解决JBoss Remote错误?

java - 需要在单元测试中使用依赖注入(inject) - 我应该使用 junit 还是 testng?

Java - 如何测试抽象类的非抽象方法?

java - 甚至没有使用的 ImageIcon 正在影响我的 JFrame/JPanel。为什么?