如何用 Java 和 Spark 模拟 multipart/form-data?
How to mock multipart/form-data with Java and Spark?
我正在使用 multipart/form-data 接收文件,如下所示(使用 Spark,而非 SpringBoot):
@Override
public Object handle(Request request, Response response) throws Exception {
request.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement(""));
Part filePart = request.raw().getPart("file");
String regex = request.raw().getParameter("regex");
String fileName = filePart.getSubmittedFileName();
byte[] fileBytes = filePart.getInputStream().readAllBytes();
问题是,我想对这个 Controller 进行单元测试,为了做到这一点,我需要一种方法来模拟请求以在其中包含 multipart/form-data,或者至少是一种使用“ when...theReturn" 来模仿那部分代码...
有什么想法吗?
提前致谢!
所以我设法找到了这个问题的答案,我想也许我可以通过回答这个问题来帮助其他人:
@Test
public void whenValidRegex_returnOkAndTotalAmount() throws Exception {
final Part file = mock(MultiPartInputStreamParser.MultiPart.class);
final Request mock = mock(Request.class); //Spark request
final Response mockResponse = mock(Response.class); //Spark response
final HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); //Javax servlet
when(mock.raw()).thenReturn(httpServletRequest);
when(file.getSubmittedFileName()).thenReturn("file.pdf");
when(mock.raw().getParameter("regex")).thenReturn(String.valueOf("SOME REGEX"));
when(mock.params("numPage")).thenReturn(String.valueOf("1"));
when(file.getInputStream()).thenReturn(IOUtils.toInputStream("ARGENTINIAN PESOS", Charset.defaultCharset())); //Here you are mocking the input stream you might get from the part file.
when(mock.raw().getPart("file")).thenReturn(file);
现在您已经模拟了 multipart/form-data,您可以继续模拟服务调用和诸如此类的事情的测试。
请忽略来自我的特定代码的内容,例如“页码”模拟,您不需要它。
希望这对其他人有帮助。
再见!
我正在使用 multipart/form-data 接收文件,如下所示(使用 Spark,而非 SpringBoot):
@Override
public Object handle(Request request, Response response) throws Exception {
request.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement(""));
Part filePart = request.raw().getPart("file");
String regex = request.raw().getParameter("regex");
String fileName = filePart.getSubmittedFileName();
byte[] fileBytes = filePart.getInputStream().readAllBytes();
问题是,我想对这个 Controller 进行单元测试,为了做到这一点,我需要一种方法来模拟请求以在其中包含 multipart/form-data,或者至少是一种使用“ when...theReturn" 来模仿那部分代码... 有什么想法吗?
提前致谢!
所以我设法找到了这个问题的答案,我想也许我可以通过回答这个问题来帮助其他人:
@Test
public void whenValidRegex_returnOkAndTotalAmount() throws Exception {
final Part file = mock(MultiPartInputStreamParser.MultiPart.class);
final Request mock = mock(Request.class); //Spark request
final Response mockResponse = mock(Response.class); //Spark response
final HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); //Javax servlet
when(mock.raw()).thenReturn(httpServletRequest);
when(file.getSubmittedFileName()).thenReturn("file.pdf");
when(mock.raw().getParameter("regex")).thenReturn(String.valueOf("SOME REGEX"));
when(mock.params("numPage")).thenReturn(String.valueOf("1"));
when(file.getInputStream()).thenReturn(IOUtils.toInputStream("ARGENTINIAN PESOS", Charset.defaultCharset())); //Here you are mocking the input stream you might get from the part file.
when(mock.raw().getPart("file")).thenReturn(file);
现在您已经模拟了 multipart/form-data,您可以继续模拟服务调用和诸如此类的事情的测试。 请忽略来自我的特定代码的内容,例如“页码”模拟,您不需要它。 希望这对其他人有帮助。 再见!