Как протестировать конечную точку Post MVC, для которой требуется составной файл PDF?

#java #spring-boot #spring-mvc #spring-boot-test

Вопрос:

у меня есть контроллер 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;
        } }
 

Комментарии:

1. Можете ли вы добавить дополнительную информацию, например, в чем заключается ошибка, которую вы получаете?

2. UploadFileModel боб-это какая-то услуга или компонент? можете ли вы обновить полный код в проблеме?

3. UploadFileModel Это класс сущностей, для этого класса spring не создан компонент, он не будет внедряться в ваш класс контроллера.

4. Thx для справки code_mechanic