gpt4 book ai didi

java - 在 Junit/Mockito 中为文件 uploader 编写单元测试

转载 作者:行者123 更新时间:2023-12-04 14:25:23 24 4
gpt4 key购买 nike

我正在尝试为以下组件编写单元测试以上传文件:

@Component("uploader")
public class FileUploader {

public List<FileItem> processFileUploadRequest(HttpServletRequest request) throws FileUploadException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletContext servletContext = request.getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
ServletFileUpload upload = new ServletFileUpload(factory);
return upload.parseRequest(request);
}
}

我已经使用 junit/mockito 编写了单元测试,如下所示:

@Test
public void testProcessFileUploadRequestSuccess() throws FileUploadException {
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
ServletContext servletContext = Mockito.mock(ServletContext.class);
Mockito.when(request.getServletContext()).thenReturn(servletContext);
Mockito.when(servletContext.getAttribute("javax.servlet.context.tempdir")).thenReturn(this.servletTmpDir);
Assert.assertNotNull(fileUploader.processFileUploadRequest(request));
}

我收到以下错误:

org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:947)
...

任何人都可以提供任何线索吗?谢谢。

最佳答案

这个错误...

the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null

... 是您的 HttpServletRequest 没有多部分内容类型的结果。

您可以通过在测试用例中添加以下行来解决此问题:

Mockito.when(request.getContentType()).thenReturn("multipart/form-data; boundary=someBoundary");

旁注:您的问题(具体来说,这部分:@Component("uploader"))表明您正在使用 Spring。如果是这样,那么也许您的文件上传代码可以使用 Spring 的 MockMvcRequestBuilders#fileUpload(String, Object...) 更轻松地进行测试。返回 MockMultipartHttpServletRequestBuilder .像这样:

mockMvc.perform(MockMvcRequestBuilders.fileUpload("/upload")
.file(aFile)
.andExpect(status().is(200))
.andExpect(content().string("..."));

关于java - 在 Junit/Mockito 中为文件 uploader 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com