如何用java和spark模拟多部分/表单数据?

6qftjkof  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(546)

我正在接收一个使用多部分/表单数据的文件,如下所示(使用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();

问题是,我想对这个控制器进行单元测试,为了做到这一点,我需要一种方法来模拟请求,在请求中包含一个多部分/表单数据,或者至少需要一种方法来使用“when…thereturn”来模拟这部分代码。。。有什么想法吗?
提前谢谢!

9vw9lbht

9vw9lbht1#

所以我设法找到了这个问题的答案,我想也许我可以通过回答这个问题来帮助其他人:

@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);

现在您已经模拟了多部分/表单数据,您可以继续模拟服务调用之类的测试。请忽略来自我的特定代码的东西,比如“页码”嘲弄,你不需要。希望这对其他人有帮助。再见!

相关问题