当前位置: 首页 > 知识库问答 >
问题:

Spring mvc:使用MockMultipartFIle和其他表单数据对控制器进行单元测试

上官羽
2023-03-14

我正在尝试对一个控制器进行单元测试,它接受一个<code>ArticleForm</code>类型的请求对象,它包含一个<code>MultipartFile</code>列表。

这是我正在尝试测试的控制器方法。

@RequestMapping(value = "/admin/save", method = RequestMethod.POST)
    public String save(@ModelAttribute @Valid ArticleForm articleForm,
                BindingResult result, RedirectAttributes redirectAttributes) {
  ....
 }

下面是Model属性对象ArticleForm

public class ArticleForm {
    private String id;

    @NotEmpty
    private String title;

    @NotEmpty
    private String description;

    private List<MultipartFile> images = Collections.emptyList();

  }

在我的单元测试中,我想提交3个<code>MockMulitpartFile</code>对象以及<code>标题</code>和<code>描述</code>

这是我尝试过的。填充标题descriptionlist为空

@Test
public void adminController_saveArticleWithTitleAndDescription() throws Exception {

    final MockMultipartFile multipartFile1 = new MockMultipartFile("image1", "image1", "image/png", getResourceAsStream("/images/image1.png"));
    final MockMultipartFile multipartFile2 = new MockMultipartFile("image2", "image2", "image/png", getResourceAsStream("/images/image2.png"));
    final MockMultipartFile multipartFile3 = new MockMultipartFile("image3", "image3", "image/jpeg", getResourceAsStream("/images/image2.png"));

    mockMvc.perform(fileUpload("/admin/save")
            .file(multipartFile1)
            .file(multipartFile2)
            .file(multipartFile3)
            .contentType(MediaType.MULTIPART_FORM_DATA)
            .param("title", "Integration Testing")
            .param("description", "This is an integration test"))
            .andExpect(flash().attribute(FLASH_TYPE, is(FLASH_TYPE_SUCCESS)))
            .andExpect(flash().attribute(FLASH_MESSAGE, is(msgs.getMessage("controller.admin.save.success"))))
            .andExpect(status().isFound())
            .andExpect(view().name("redirect:/admin/add"));
}

如何将这3个<code>MockMultipartFile</code>对象提交到<code>ArticleForm</code>模型属性中的<code>图像</code>列表?

感谢您为解决此问题提供的帮助。


共有1个答案

丌官霖
2023-03-14

您的测试是正确的。使用“图像”作为文件名,如下所示。

final MockMultipartFile multipartFile1 = new MockMultipartFile("images", "image1", "image/png", getResourceAsStream("/images/image1.png"));
final MockMultipartFile multipartFile2 = new MockMultipartFile("images", "image2", "image/png", getResourceAsStream("/images/image2.png"));
final MockMultipartFile multipartFile3 = new MockMultipartFile("images", "image3", "image/jpeg", getResourceAsStream("/images/image2.png"));
 类似资料:
  • 问题内容: 对于我一生,我无法让$ httpBackend在执行$ http get请求的控制器上工作。我已经尝试了几个小时=) 我将其简化为下面可以最简单的形式。如果我通过测试 在控制器中注释掉$ http.get()请求 在测试中注释掉“ httpMock.flush()” 并更改“猪”和“狗”以匹配 也就是说,这是一个有效的工作测试和应用程序。 如果放回去,则会在底部显示错误。 app /

  • 问题内容: 编辑:本文末尾的“快速与肮脏”解决方案 我使用的是AngularUI-Bootstrap中的模式窗口,其方式与网站上说明的相同,只是我分割了文件。因此,我有: CallingController.js: modalController.js: 当我使用Karma测试此代码(在karma配置文件中加载了 ui-bootstrap-tpls.min.js 文件)时,出现以下错误: 错误:[

  • 当使用mockito单元测试Spring mvc控制器时,如何注入道层对象。当使用SpringJUnit4ClassRunner类时,它总是使用@Spy注释给空指针异常。 示例代码: 在这个测试用例中,依次调用,它总是返回

  • 我有一个请求表单的映射: 现在我想用MockMvcBuilders为此编写一个测试。不过,我不能这样做。 这里的挑战是请求处理程序需要使用Multipart/form-data,它由4个Multipart Files和1个Json数据组成。 有没有办法解决这个问题?请记住,我必须使用Spring 4.3。 如果您需要更多信息,请告诉我。

  • 问题内容: 我有一个与此类似的简单带注释的控制器: 我想用这样的单元测试来测试它: 问题是AnnotationMethodHandlerAdapter.handler()方法引发异常: 问题答案: 从Spring 3.2开始,有一种适当的方法可以轻松,优雅地进行测试。您将可以执行以下操作: 有关更多信息,请访问http://blog.springsource.org/2012/11/12/spri

  • 我对使用Spring控制器进行单元测试的概念是新的。我正在遵循我在网上找到的一些示例,并尝试实现他们的测试策略。这是我的基本控制器: 这是我的单元测试: 看起来很简单,但我得到了以下错误: 它完成了这项工作,但它没有像我之前尝试的那样使用任何Spring注释…这种方法是不好的,所以试图弄清楚为什么每当我在测试文件中包含注释时,总是会出现错误。 我的POM: