#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