如何测试需要 PDF Multipart 文件的 Post MVC 端点?

问题描述

我有这样一种方法的 MVC 控制器:

 @PostMapping("/uploadfiles")
public String uploadMultiplePdfs(@Valid FormModel formModel,BindingResult bindingResult,@RequestParam("pdfs")
                                         multipartfile[] pdfs) throws IOException {
    if (bindingResult.hasErrors()) {
        return "main";
    }

    //(here is some code for saving pdfs into database and other logic)

    return "redirect:/pdflist";
}

我想测试一下。我有

@SpringBoottest
@AutoConfiguremockmvc

public class MvcLayerTest {

//here lots of autowired beans

@Test
 public void uploadResponse() throws Exception {
    Mockmultipartfile mockmultipartfile = new Mockmultipartfile ("file","Hello",MediaType.APPLICATION_PDF_VALUE,"hello world".getBytes(StandardCharsets.UTF_8));    
        this.mockmvc.perform(multipart("/uploadfiles").file(mockmultipartfile)).andDo(print()).andExpect(status().is3xxRedirection());
    }

不幸的是,这个测试没有通过。我究竟做错了什么 ?感谢您的任何帮助。我收到错误信息:

*原因:

org.springframework.beans.factory.NoSuchBeanDeFinitionException: No qualifying bean of type 'pdfmerger.entity.UploadedFileModel' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListablebeanfactory.raiseNoMatchingBeanFound(DefaultListablebeanfactory.java:1790)
    at org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1346)
    at org.springframework.beans.factory.support.DefaultListablebeanfactory.resolveDependency(DefaultListablebeanfactory.java:1300)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
    ... 72 more*

然而,UploadedFileModel 被自动连接到这个测试类中。 UploadedFileModel 只是一个简单的实体:

 @Entity @Table(name = "UPLOADED_PDF")
    
    //lombok annotations
 @Data
 public class UploadedFileModel {
        @Id
        @Column(name = "PDF_ID")
        @GeneratedValue(generator = "system-uuid")
        @GenericGenerator(name = "system-uuid",strategy = "uuid2")
        private String id;
        @Column(name = "PDF_NAME")
        private String pdfName;
        @Column(name = "FILE_TYPE")
        private String fileType;
        @Column(name = "PDF_SIZE")
        private long size;
        @Lob
        @Column(name = "PDF_DATA")
        private byte[] pdfData;
    
        public UploadedFileModel() {
        }
    
        public UploadedFileModel(String pdfName,String fileType,Long size,byte[] pdfData) {
            this.pdfName = pdfName;
            this.fileType = fileType;
            this.pdfData = pdfData;
            this.size = size;
        } }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)